/*! Txplayer - v3.0.0 - 2016-12-30 16:40:14
 * Copyright (c) 2016
 * Powered by Tencent-Video Web Front End Team
 */
!function (a) {
    function b(d) {
        if (c[d])return c[d].exports;
        var e = c[d] = {exports: {}, id: d, loaded: !1};
        return a[d].call(e.exports, e, e.exports, b), e.loaded = !0, e.exports
    }

    var c = {};
    return b.m = a, b.c = c, b.p = "", b(0)
}({

    0: function (a, b, c) {
        a.exports = c(75)
    },

    75: function (a, b, c) {
        function d(a) {
            return h = Txplayer.$, this.dataset = {}, this.context = a, g.mobile || c(78), this.init()
        }

        var e = c(76), f = c(77), g = Txplayer.util, h = Txplayer.$;
        d.prototype = {
            init: function () {
                return this.dataset.defer = Txplayer.$.Deferred(), Txplayer.dataset.pluginsPreload && !this.context.config.containerId ? (this.dataset.defer.reject(), this.dataset.defer) : this.context.config.containerId ? (this.dataset.$container = h("#" + this.context.config.containerId), this.dataset.disableHideControl = !1, this.dataset.ipadClass = "txp_player_pad", this.context.dataset.isWindowFocus = !0, this.dataset.$container && this.dataset.$container.length ? (this.loadHTML5PlayerSkin(), this.write(), this.exportsModuleApis(), this.addEventListener(), this.dataset.defer) : (g.showError("HtmlFrame初始化错误", "没找到id=" + this.context.config.containerId + "的dom节点"), this.dataset.defer.reject(), this.dataset.defer)) : (g.showError("HtmlFrame初始化错误", "containerId没找到"), this.dataset.defer.reject(), this.dataset.defer)
            }, getModStyle: function () {
                function a(a) {
                    return a = a || "100%", "number" == typeof a ? parseInt(a) + "px" : "string" == typeof a ? a.indexOf("%") > -1 ? a : parseInt(a) + "px" : a
                }

                var b = [];
                return b.push("width:" + a(this.context.config.width)), b.push("height:" + a(this.context.config.height)), b.join(";")
            }, loadHTML5PlayerSkin: function () {
                if ("flash" === this.context.config.playerType)return void this.dataset.defer.resolve();
                var a, b = this;
                return (a = Txplayer.dataset.H5PlayerStyleUrl[this.context.config.playerType]) ? void g.loadCss(a).done(function () {
                        b.dataset.defer.resolve()
                    }).fail(function () {
                        g.showError("找不到播放器的皮肤样式文件", Txplayer.dataset.HdPlayerStyleUrl)
                    }) : void b.dataset.defer.resolve()
            }, write: function () {
                var a = this.context.config.useSVG ? 1 : Txplayer.$.inArray(this.context.config.playerType, ["html5hd", "ipadh5", "chromehls", "safarihls"]) > -1 ? 1 : 0;
                Txplayer.dataset.maxId > 1 && (a = !1);
                var b = h.inArray(this.context.config.playerType, ["html5hd", "chromehls", "safarihls"]) > -1 ? 'tabindex="-1"' : "";
                if (a) {
                    document.createElement("txpdiv")
                }
                var c, d = {
                    useSVG: a,
                    ie: g.browser.ie,
                    playerid: "txplayer_" + this.context.config.playerId,
                    mod_stype: this.getModStyle(),
                    svgstr: f,
                    tabindex: b
                }, i = ["HtmlFrame.write Error:"], j = this, k = function () {
                    i = i.join("\n"), j.context.msg.broadcast(Txplayer.apiList.privateApi.reportError, {
                        msg: i,
                        code: Txplayer.define.reportCode.JS_ERROR,
                        stack: c
                    })
                };
                try {
                    var l = Txplayer.$.tmpl(e, d);
                    this.dataset.$container.html(l), this.dataset.$playermod = this.dataset.$container.find("#" + d.playerid), this.context.dataset.$playermod = this.dataset.$playermod, "v.qq.com" === location.hostname && this.context.config.showLogo !== !0 || this.dataset.$playermod.addClass("txp_player_external"), Txplayer.dataset.maxId++
                } catch (m) {
                    i.push(m.message), c = m.stack
                }
                return i.length > 1 ? void k() : ("ipadh5" === this.context.config.playerType && this.dataset.$playermod.addClass(this.dataset.ipadClass), void this.context.msg.on("ready", function () {
                        j.context.dataset.playerWidth = j.dataset.$container.width(), j.context.dataset.playerHeight = j.dataset.$container.height()
                    }))
            }, resize: function (a) {
                "object" !== h.type(a) || h.isEmptyObject(a) || !a.hasOwnProperty("width") && !a.hasOwnProperty("height") || (this.dataset.$playermod.css(a), this.context.dataset.playerWidth = this.dataset.$container.width(), this.context.dataset.playerHeight = this.dataset.$container.height())
            }, autoResize: function (a) {
                a = a || "width";
                var b = {width: this.context.dataset.videoWidth, height: this.context.dataset.videoHeight};
                if (!(b && b.width && b.height))return !1;
                if ("width" === a) {
                    var c = this.dataset.$playermod.width();
                    this.resize({height: parseInt(c * (b.height / b.width))})
                } else {
                    var d = this.dataset.$playermod.height();
                    this.resize({width: parseInt(d * (b.width / b.height))})
                }
            }, destroy: function (a) {
                var b = this;
                if ("all" === a)for (var c in Txplayer.dataset._instance)Txplayer.dataset._instance[c] && "function" === Txplayer.$.type(Txplayer.dataset._instance[c].destroy) && Txplayer.dataset._instance[c].destroy(); else if ("HtmlFrame" === a) Txplayer.$.each(this.dataset.moduleApis, function (a, c) {
                    b.context.msg.off(a, c)
                }), Txplayer.$.each(this, function (a, b) {
                    b = null
                }); else if ("string" === Txplayer.$.type(a)) b.context.msg.broadcast("destroyPlugin", a); else {
                    b.dataset.$container && "function" === Txplayer.$.type(b.dataset.$container.animate) ? b.dataset.$container.animate({height: 0}, 300, function () {
                            b.dataset.$container.html("")
                        }) : b.dataset.$container.html("");
                    var d = b.context.dataset.playerId;
                    b.context.msg.broadcast("destroyPlugin"), Txplayer.dataset._instance[d] && (Txplayer.dataset._instance[d] = null, delete Txplayer.dataset._instance[d])
                }
            }, getPlayerSize: function () {
                return {width: this.context.dataset.playerWidth, height: this.context.dataset.playerHeight}
            }, isPlayerInScreen: function () {
                return !!g.isInScreen(this.dataset.$container)
            }, isWindowFocus: function () {
                return this.context.dataset.isWindowFocus
            }, addEventListener: function () {
                var a = this;
                this.dataset.$playermod.on("click", function (b) {
                    var c = b.target, d = h(c), e = d.attr("data-report");
                    e || (e = d.parent().attr("data-report")), e || (e = d.parent().parent().attr("data-report")), e && a.context.msg.broadcast("reportUsrAction", {usr_action: e});
                    var f = d.attr("data-action");
                    if ("a" === c.nodeName.toLowerCase() && f)if ("openTxVideo" === f) {
                        var i = g.getTxVideoPageURLByVid(a.context.dataset.vid);
                        i && window.open(i)
                    } else"openVIP" === f && (a.context.msg.broadcast("pause"), a.context.userMsg.broadcast("showUIVipGuide", {openvip: !0}))
                }), h(document).on("show", function () {
                    a.context.dataset.isWindowFocus = !0
                }), h(document).on("hide", function () {
                    a.context.dataset.isWindowFocus = !1
                })
            }, exportsModuleApis: function () {
                var a = this;
                this.dataset.moduleApis = {}, this.dataset.moduleApis.resize = function () {
                    return a.resize.apply(a, arguments)
                }, this.dataset.moduleApis.destroy = function () {
                    return a.destroy.apply(a, arguments)
                }, this.dataset.moduleApis.getPlayerSize = function () {
                    return a.getPlayerSize.apply(a, arguments)
                }, this.dataset.moduleApis.autoResize = function () {
                    return a.autoResize.apply(a, arguments)
                }, this.dataset.moduleApis.isPlayerInScreen = function () {
                    return a.isPlayerInScreen.apply(a, arguments)
                }, this.dataset.moduleApis.isWindowFocus = function () {
                    return a.isWindowFocus.apply(a, arguments)
                }, h.extend(this.context.userApi, this.dataset.moduleApis), this.dataset.dataApis = {}, this.dataset.dataApis.isPlayerInScreen = function (b, c) {
                    c.data = a.isPlayerInScreen()
                }, h.each(this.dataset.dataApis, function (b, c) {
                    a.context.msg.setData(b, c)
                })
            }
        }, Txplayer.register("HtmlFrame", d)
    },

    76: function (a, b) {
        a.exports = '<% if(ie || !useSVG){ %>\n  <div class="txp_player" id="<%=playerid%>" style="<%=mod_stype%>">\n  </div>\n<% }else{%>\n  <txpdiv class="txp_player txp_player_desktop txp_autohide_progress" id="<%=playerid%>" style="<%=mod_stype%>" <%=tabindex%>>\n  <% if(useSVG) {%>\n    <%=svgstr%>\n  <% } %>\n  <txpdiv class="txp_gradient_top"></txpdiv>\n  <txpdiv class="txp_gradient_bottom"></txpdiv>\n  </txpdiv>\n<% } %>'
    },

    77: function (a, b) {
        a.exports = '<svg class="txp_svg_sprite" display="none" version="1.1" xmlns="http://www.w3.org/2000/svg">\r\n\t<symbol id="txp_svg_collect" viewBox="0 0 36 36">\r\n\t\t<path d="M32.5 26H29v3.5a1.5 1.5 0 0 1-3 0V26h-3.5a1.5 1.5 0 1 1 0-3H26v-3.469a1.5 1.5 0 1 1 3 0V23h3.5a1.5 1.5 0 1 1 0 3zm.319-11.407c-.139.684-.716 1.209-1.442 1.209a1.5 1.5 0 0 1-1.5-1.5c0-.083.035-.154.048-.234l-.014-.002c.243-1.122.145-2.386-.598-3.584-.655-1.055-2.288-2.461-3.803-2.461-2.045 0-3.443.622-4.661 1.806l-3.358 3.182-3.485-3.207c-1.113-1.054-3.172-1.786-4.736-1.786-1.259 0-2.803.987-3.654 2.57-.975 1.809-.986 4.04.755 5.962l11.116 9.485.001-.001 1.015.928c.02.019.041.035.06.054l.004.004-.001.001c.256.269.419.629.419 1.03a1.5 1.5 0 0 1-1.5 1.5c-.435 0-.819-.191-1.093-.487L4.46 18.931c-3.285-3.209-3.285-8.357-.049-11.52C5.998 5.857 8.116 5 10.371 5c2.257 0 4.374.856 5.963 2.411l1.153 1.128 1.152-1.128C20.227 5.856 22.345 5 24.602 5c2.256 0 4.374.856 5.962 2.411a7.992 7.992 0 0 1 2.283 7.187l-.028-.005z"/>\r\n\t</symbol>\r\n\t<symbol id="txp_svg_collected" viewBox="0 0 36 36">\r\n\t\t<path d="M27 14.5a9.5 9.5 0 0 0-9.5 9.5c0 1.515.364 2.941.994 4.211l-1.507 1.28L3.96 18.431C.675 15.222.675 10.074 3.911 6.911 5.498 5.357 7.616 4.5 9.871 4.5c2.257 0 4.374.856 5.963 2.411l1.153 1.128 1.152-1.128C19.727 5.356 21.845 4.5 24.102 4.5c2.256 0 4.374.856 5.962 2.411a7.99 7.99 0 0 1 1.755 8.912A9.445 9.445 0 0 0 27 14.5zm0 2a7.5 7.5 0 1 1 0 15 7.5 7.5 0 0 1 0-15zm-4.042 9.485l1.811 1.81c.054.082.09.172.161.244a1.45 1.45 0 0 0 1.075.421 1.44 1.44 0 0 0 1.067-.418c.066-.066.097-.148.147-.222l3.851-3.851a1.463 1.463 0 1 0-2.069-2.07l-3.008 3.007-.978-.978a1.455 1.455 0 0 0-2.057 2.057z"/>\r\n\t</symbol>\r\n\t<symbol id="txp_svg_share" viewBox="0 0 36 36">\r\n\t\t<path d="M32.946 23.601l.023.009C30.694 29.675 24.86 34 18 34 9.163 34 2 26.837 2 18c0-6.095 3.42-11.372 8.435-14.072a1.48 1.48 0 0 1 .982-.387 1.5 1.5 0 0 1 1.5 1.5c0 .557-.317 1.023-.767 1.282l.032.064C7.927 8.523 5 12.915 5 18c0 7.18 5.82 13 13 13 5.577 0 10.319-3.518 12.165-8.45l.047.017c.154-.665.722-1.171 1.434-1.171a1.5 1.5 0 0 1 1.5 1.5c0 .26-.084.492-.2.705zM32 14.5a1.5 1.5 0 1 1-3 0V9.086l-9.455 9.455a1.498 1.498 0 0 1-2.117-2.117L26.852 7H21.5a1.5 1.5 0 0 1 0-3h8.929a1.47 1.47 0 0 1 .64.115c.546.224.931.758.931 1.385v9z"/>\r\n\t</symbol>\r\n\t<symbol id="txp_svg_play" viewBox="0 0 36 36">\r\n\t\t<path d="M25.8 18c0 .6-.3 1.1-.8 1.3L12.5 27c-.2.1-.5.2-.8.2-.8 0-1.5-.6-1.5-1.5V10c0-.8.7-1.5 1.5-1.5.3 0 .5.1.8.2l12.7 7.9c.4.5.6.9.6 1.4z"/>\r\n\t</symbol>\r\n\t<symbol id="txp_svg_replay" viewBox="0 0 36 36">\r\n\t\t<path d="M17.9 28c-4.9 0-9-3.6-9.8-8.3V19.4c0-.8.7-1.4 1.5-1.4s1.5.6 1.5 1.4c.8 3.8 4.5 6.2 8.3 5.4s6.2-4.5 5.4-8.3c-.7-3.2-3.5-5.6-6.9-5.6-1.8 0-3.6.7-4.8 2h1.3c.8 0 1.5.7 1.5 1.5s-.6 1.6-1.5 1.6h-4c-.8 0-1.5-.7-1.5-1.5v-4c0-.8.7-1.5 1.5-1.5.7 0 1.2.5 1.4 1.1C13.6 8.7 15.7 8 17.9 8c5.5 0 10 4.5 10 10s-4.4 10-10 10z" />\r\n\t</symbol>\r\n\t<symbol id="txp_svg_pause" viewBox="0 0 36 36">\r\n\t\t<path d="M23.5 28c-.8 0-1.5-.7-1.5-1.5v-17c0-.8.7-1.5 1.5-1.5s1.5.7 1.5 1.5v17c0 .8-.7 1.5-1.5 1.5zm-11 0c-.8 0-1.5-.7-1.5-1.5v-17c0-.8.7-1.5 1.5-1.5s1.5.7 1.5 1.5v17c0 .8-.7 1.5-1.5 1.5z"/>\r\n\t</symbol>\r\n\t<symbol id="txp_svg_next" viewBox="0 0 36 36">\r\n\t\t<path d="M26.5 28c-.8 0-1.5-.7-1.5-1.5v-17c0-.8.8-1.5 1.5-1.5s1.5.7 1.5 1.5v17c0 .8-.7 1.5-1.5 1.5zm-4.7-9.1c0 .1 0 .1 0 0l-11.1 8.6s-.1.1-.2.1l-.3.2c-.3.1-.4.2-.8.2-.8 0-1.5-.7-1.5-1.5V9.5c.2-.8.9-1.5 1.7-1.5.2 0 .5.1.7.2v-.1L22 16.3c.4.3.7.7.7 1.2-.1.7-.5 1.2-.9 1.4z"/>\r\n\t</symbol>\r\n\t<symbol id="txp_svg_stop" viewBox="0 0 36 36">\r\n\t\t<path d="M14 10h8c2.2 0 4 1.8 4 4v8c0 2.2-1.8 4-4 4h-8c-2.2 0-4-1.8-4-4v-8c0-2.2 1.8-4 4-4z" />\r\n\t</symbol>\r\n\t<symbol id="txp_svg_shop" viewBox="0 0 24 24">\r\n\t\t<path d="M18 13.836V14H8.793l-.552 2H18a2 2 0 1 1-2 2c0-.368.106-.707.278-1H8.722c.172.294.278.633.278 1a2 2 0 1 1-2-2h.206l.552-2H7v-.223L5.34 5H3V4h3v.01L6.147 4l.377 2H20v1h-.206L18 13.835zM18 19a1 1 0 1 0 0-2 1 1 0 0 0 0 2zM7 17a1 1 0 1 0 0 1.998 1 1 0 0 0 0-2zM6.714 7l1.134 6h9.357l1.575-6H6.714z"/>\r\n\t</symbol>\r\n\t<symbol id="txp_svg_eye" viewBox="0 0 24 24">\r\n\t\t<path d="M12 18c-5.468 0-9-6-9-6s3.533-6 9-6c5.467 0 9 6 9 6s-3.533 6-9 6zm0-11c-5.033 0-8 5-8 5s2.967 5 8 5c5.033 0 8-5 8-5s-2.967-5-8-5zm0 8a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0-5a2 2 0 1 0 0 3.998 2 2 0 0 0 0-4z"/>\r\n\t</symbol>\r\n\t<symbol id="txp_svg_volume" viewBox="0 0 24 24">\r\n\t\t<path d="M22 12c0 2.2-.8 4.1-2 5.7v.2c0 .5-.4.9-.9 1l-1.3-1.8C19.1 15.8 20 14 20 12c0-2-.8-3.8-2.2-5-.3-.2-.5-.5-.5-.9 0-.6.4-1 1-1 .3 0 .5.1.7.3 1.9 1.6 3 4 3 6.6zm-5.3 3.3c-.1.1-.1.2-.2.2-.2.1-.3.2-.6.2-.6 0-1-.4-1-1 0-.3.2-.6.4-.8.4-.5.6-1.1.6-1.8s-.2-1.3-.6-1.8l.1-.1c-.2-.3-.4-.6-.4-.9 0-.6.4-1 1-1 .4 0 .8.3.9.6.7.8 1.1 1.9 1.1 3 0 1.4-.5 2.5-1.3 3.4zM13 3zm-.3 17.7c-.2.2-.4.3-.7.3-.3 0-.6-.1-.8-.4L5.8 17H3c-.6 0-1-.4-1-1V8c0-.6.4-1 1-1h2.8l5.4-3.6c.2-.3.5-.4.8-.4.2 0 .5.1.7.3.2.2.3.4.3.7v16c0 .3-.1.5-.3.7zM11 5.8L6.8 8.6c-.2.3-.5.4-.8.4H4v6h2c.3 0 .6.1.8.4l4.2 2.9V5.8z"/>\r\n\t</symbol>\r\n\t<symbol id="txp_svg_volume_damping" viewBox="0 0 24 24">\r\n\t\t<path d="M16.7 15.3c-.1.1-.1.2-.2.2-.2.1-.3.2-.6.2-.6 0-1-.4-1-1 0-.3.2-.6.4-.8.4-.5.6-1.1.6-1.8s-.2-1.3-.6-1.8l.1-.1c-.2-.3-.4-.6-.4-.9 0-.6.4-1 1-1 .4 0 .8.3.9.6.7.8 1.1 1.9 1.1 3 0 1.4-.5 2.5-1.3 3.4zm-4 5.4c-.2.2-.4.3-.7.3s-.6-.1-.8-.4L5.8 17H3c-.6 0-1-.4-1-1V8c0-.6.4-1 1-1h2.8l5.4-3.6c.2-.3.5-.4.8-.4.2 0 .5.1.7.3s.3.4.3.7v16c0 .3-.1.5-.3.7zM11 5.8L6.8 8.6c-.2.3-.5.4-.8.4H4v6h2c.3 0 .6.1.8.4l4.2 2.9V5.8z"/>\r\n\t</symbol>\r\n\t<symbol id="txp_svg_volume_mute" viewBox="0 0 24 24">\r\n\t\t<path d="M20.2 17.4L18.8 16c.8-1.1 1.2-2.5 1.2-3.9 0-2-.8-3.8-2.2-5-.3-.2-.5-.5-.5-.9 0-.6.4-1 1-1 .3 0 .5.1.7.3 1.8 1.6 3 4 3 6.7 0 1.8-.7 3.7-1.8 5.2zm-2.9-2.9L15.8 13c.1-.3.2-.6.2-1 0-.7-.2-1.3-.6-1.8l.1-.1c-.3-.2-.5-.5-.5-.8 0-.6.4-1 1-1 .4 0 .8.3.9.6.7.8 1.1 1.9 1.1 3 0 1-.3 1.9-.7 2.6zM13 3zm-2 2.8l-1.4 1-1.4-1.4 3-2c.2-.3.5-.4.8-.4.2 0 .5.1.7.3.2.2.3.4.3.7v6.2l-2-2V5.8zm9.7 14.9c-.4.4-1 .4-1.4 0l-16-16c-.4-.4-.4-1 0-1.4s1-.4 1.4 0l16 16c.4.4.4 1 0 1.4zM4.2 7l2 2H4v6h2c.3 0 .6.1.8.4l4.2 2.8v-4.4l2 2V20c0 .2-.1.5-.3.7-.2.2-.4.3-.7.3-.3 0-.6-.1-.8-.4L5.8 17H3c-.6 0-1-.4-1-1V8c0-.6.4-1 1-1h1.2z"/>\r\n\t</symbol>\r\n\t<symbol id="txp_svg_setting" viewBox="0 0 24 24">\r\n\t\t<path d="M21 11v2l-2 1v-.3c-.2.7-.5 1.5-.9 2.1l.2-.2.7 2.1-1.4 1.4-2.1-.7.2-.2c-.7.4-1.4.7-2.1.9h.4l-1 2h-2l-1-2h.3c-.7-.2-1.5-.5-2.1-.9l.2.2-2.1.7-1.4-1.4.7-2.1.2.2c-.4-.7-.7-1.4-.9-2.1v.3l-2-1v-2l2-1v.4c.2-.8.5-1.6 1-2.3l-.3.4-.7-2.2 1.4-1.4 2.1.7-.3.4c.7-.5 1.5-.8 2.3-1H10l1-2h2l1 2h-.4c.8.2 1.6.5 2.3.9l-.3-.3 2.1-.7 1.4 1.4-.7 2.1-.3-.3c.4.7.7 1.4.9 2.2V10l2 1zm-9-4c-2.8 0-5 2.2-5 5s2.2 5 5 5 5-2.2 5-5-2.2-5-5-5z"/> \r\n\t</symbol>\r\n\t<symbol id="txp_svg_bulb" viewBox="0 0 24 24">\r\n\t\t<path d="M15 16.317V17c0 .186-.065.35-.153.5.088.15.153.313.153.5v2a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1v-2c0-.186.064-.35.153-.5A.97.97 0 0 1 9 17v-.683A6.994 6.994 0 0 1 5 10a7 7 0 0 1 14 0 6.994 6.994 0 0 1-4 6.317zM10 20h4v-2h-4v2zm2-16a6 6 0 0 0-6 6c0 2.215 1.214 4.128 3 5.167V15c.452.36 1 .593 1 .593V17h4v-1.5s.462-.096 1-.5v.167c1.786-1.04 3-2.953 3-5.167a6 6 0 0 0-6-6z"/>\r\n\t</symbol>\r\n\t<symbol id="txp_svg_window" viewBox="0 0 24 24">\r\n\t\t<path d="M19 16H9a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1zm0-11H9v10h10V5zM5 19h10v-2h1v2a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1h2v1H5v10z"/> \r\n\t</symbol>\r\n\t<symbol id="txp_svg_size_true" viewBox="0 0 24 24">\r\n\t\t<path d="M20 19H4c-.6 0-1-.4-1-1V6c0-.6.4-1 1-1h16c.6 0 1 .4 1 1v12c0 .6-.4 1-1 1zM5 7v10h14V7H5z"/>\r\n\t</symbol>\r\n\t<symbol id="txp_svg_size" viewBox="0 0 24 24">\r\n\t\t<path d="M20 19H4c-.6 0-1-.4-1-1V6c0-.6.4-1 1-1h16c.6 0 1 .4 1 1v12c0 .6-.4 1-1 1zM5 17h10V7H5v10zM19 7h-2v10h2V7z"/>\r\n\t</symbol>\r\n\t<symbol id="txp_svg_fake" viewBox="0 0 24 24">\r\n\t\t<path d="M20 20H4c-.6 0-1-.4-1-1V5c0-.6.4-1 1-1h16c.6 0 1 .4 1 1v14c0 .6-.4 1-1 1zM5 6v12h14V6H5zm12 11h-2c-.6 0-1-.4-1-1s.4-1 1-1h1v-1c0-.6.4-1 1-1s1 .4 1 1v2c0 .6-.4 1-1 1zm0-6c-.6 0-1-.4-1-1V9h-1c-.6 0-1-.4-1-1s.4-1 1-1h2c.6 0 1 .4 1 1v2c0 .6-.4 1-1 1zm-8 6H7c-.6 0-1-.4-1-1v-2c0-.6.4-1 1-1s1 .4 1 1v1h1c.6 0 1 .4 1 1s-.4 1-1 1zm0-8H8v1c0 .6-.4 1-1 1s-1-.4-1-1V8c0-.6.4-1 1-1h2c.6 0 1 .4 1 1s-.4 1-1 1z"/>\r\n\t</symbol>\r\n\t<symbol id="txp_svg_fake_true" viewBox="0 0 24 24">\r\n\t\t<path d="M20 20H4c-.6 0-1-.4-1-1V5c0-.6.4-1 1-1h16c.6 0 1 .4 1 1v14c0 .6-.4 1-1 1zM5 6v12h14V6H5zm12 9h-1v1c0 .6-.4 1-1 1s-1-.4-1-1v-2c0-.6.4-1 1-1h2c.6 0 1 .4 1 1s-.4 1-1 1zm0-4h-2c-.6 0-1-.4-1-1V8c0-.6.4-1 1-1s1 .4 1 1v1h1c.6 0 1 .4 1 1s-.4 1-1 1zm-8 6c-.6 0-1-.4-1-1v-1H7c-.6 0-1-.4-1-1s.4-1 1-1h2c.6 0 1 .4 1 1v2c0 .6-.4 1-1 1zm0-6H7c-.6 0-1-.4-1-1s.4-1 1-1h1V8c0-.6.4-1 1-1s1 .4 1 1v2c0 .6-.4 1-1 1z"/>\r\n\t</symbol>\r\n\t<symbol id="txp_svg_fullscreen" viewBox="0 0 24 24">\r\n\t\t<path d="M19.7 19.7c-.2.2-.5.3-.7.3h-4c-.6 0-1-.4-1-1s.4-1 1-1h1.6l-3.3-3.3c-.4-.4-.3-1.1.1-1.4.4-.4 1-.4 1.4 0l3.3 3.3V15c0-.6.4-1 1-1s1 .4 1 1v4c-.1.2-.2.5-.4.7zM19 10c-.6 0-1-.4-1-1V7.4l-3.3 3.3c-.4.4-1 .4-1.4 0-.4-.4-.4-1 0-1.4L16.6 6H15c-.6 0-1-.4-1-1s.4-1 1-1h4c.3 0 .5.1.7.3.2.2.3.5.3.7v4c0 .6-.4 1-1 1zM7.4 18H9c.6 0 1 .4 1 1s-.4 1-1 1H5c-.3 0-.5-.1-.7-.3-.2-.2-.3-.5-.3-.7v-4c0-.6.4-1 1-1s1 .4 1 1v1.6l3.3-3.3c.4-.4 1.1-.3 1.4.1.4.4.4 1 0 1.4L7.4 18zm1.9-7.3L6 7.4V9c0 .6-.4 1-1 1s-1-.4-1-1V5c0-.3.1-.5.3-.7.2-.2.5-.3.7-.3h4c.6 0 1 .4 1 1s-.4 1-1 1H7.4l3.3 3.3c.4.4.4 1 0 1.4-.4.4-1 .4-1.4 0z"/>\r\n\t</symbol>\r\n\t<symbol id="txp_svg_fullscreen_true" viewBox="0 0 24 24">\r\n\t\t<path d="M16.4 9H18c.6 0 1 .4 1 1s-.4 1-1 1h-4c-.3 0-.5-.1-.7-.3-.2-.2-.3-.5-.3-.7V6c0-.6.4-1 1-1s1 .4 1 1v1.6l3.3-3.3c.4-.4 1.1-.3 1.4.1.4.4.4 1 0 1.4L16.4 9zM10 19c-.6 0-1-.4-1-1v-1.6l-3.3 3.3c-.4.4-1 .4-1.4 0-.4-.4-.4-1 0-1.4L7.6 15H6c-.6 0-1-.4-1-1s.4-1 1-1h4c.3 0 .5.1.7.3.2.2.3.5.3.7v4c0 .5-.4 1-1 1zm0-8H6c-.6 0-1-.4-1-1s.4-1 1-1h1.6L4.3 5.7c-.4-.4-.4-1 .1-1.4.4-.4 1-.4 1.4 0L9 7.6V6c0-.6.4-1 1-1s1 .4 1 1v4c0 .3-.1.5-.3.7-.2.2-.5.3-.7.3zm4 2h4c.6 0 1 .4 1 1s-.4 1-1 1h-1.6l3.3 3.3c.4.4.4 1 0 1.4s-1 .4-1.4 0L15 16.4V18c0 .6-.4 1-1 1s-1-.4-1-1v-4c0-.3.1-.5.3-.7.2-.2.5-.3.7-.3z"/>\r\n\t</symbol>\r\n\t<symbol id="txp_svg_select" viewBox="0 0 12 12">\r\n\t\t<path d="M11 12H1a1 1 0 0 1-1-1V1a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1zm0-11H1v10h10V1z"/>\r\n\t</symbol>\r\n\t<symbol id="txp_svg_select_true" viewBox="0 0 12 12">\r\n\t\t<path d="M11.5 2a.5.5 0 0 1-.5-.5V1H1v2.5a.5.5 0 0 1-1 0V1a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v.5a.5.5 0 0 1-.5.5zM.5 9a.5.5 0 0 1 .5.5V11h1.5a.5.5 0 0 1 0 1H1a1 1 0 0 1-1-1V9.5A.5.5 0 0 1 .5 9zM.285 6.643a.96.96 0 0 1 1.358-1.358L4.517 8.16l5.492-4.613a1 1 0 0 1 1.414 1.415L5.18 10.204a1 1 0 0 1-1.415 0c-.016-.017-.022-.04-.037-.056-.014-.012-.026-.008-.04-.022L.284 6.643zM6.5 11H11V7.5a.5.5 0 0 1 1 0V11a1 1 0 0 1-1 1H6.5a.5.5 0 0 1 0-1z"/>\r\n\t</symbol>\r\n</svg>'
    },

    78: function (a, b) {
        !function (a, b) {
            b(a, jQuery)
        }("undefined" != typeof window ? window : this, function (a, b, c) {
            "use strict";
            function d() {
                "hidden" !== e && (g.hidden = i.pageVisibility ? g[e] : c)
            }

            for (var e, f, g = a.document, h = ["webkit", "o", "ms", "moz", ""], i = b.support || {}, j = ("onfocusin" in g && "hasFocus" in g ? "focusin focusout" : "focus blur"); (f = h.pop()) !== c;)if (e = (f ? f + "H" : "h") + "idden", i.pageVisibility = g[e] !== c, i.pageVisibility) {
                j = f + "visibilitychange";
                break
            }
            d(), b(/blur$/.test(j) ? a : g).on(j, function (a) {
                var c = a.type;
                b(g).triggerHandler(e && g[e] || /^(?:blur|focusout)$/.test(c) ? "hide" : "show"), d()
            })
        })
    }
});
/*! Txplayer - v3.0.0 - 2016-12-30 16:40:14
 * Copyright (c) 2016
 * Powered by Tencent-Video Web Front End Team
 */
!function (a) {
    function b(d) {
        if (c[d])return c[d].exports;
        var e = c[d] = {exports: {}, id: d, loaded: !1};
        return a[d].call(e.exports, e, e.exports, b), e.loaded = !0, e.exports
    }

    var c = {};
    return b.m = a, b.c = c, b.p = "", b(0)
}({
    0: function (a, b, c) {
        a.exports = c(132)
    },

    35: function (a, b) {
        var c = {unstarted: -1, ended: 0, playing: 1, paused: 2, buffering: 3, cued: 4, stop: 5}, d = {
            msd: "流畅180P",
            sd: "标清270P",
            hd: "高清480P",
            shd: "超清720P",
            fhd: "蓝光1080P"
        };
        a.exports = {playerstate: c, definitionMap: d}
    },

    132: function (a, b, c) {
        function d(a) {
            f = Txplayer.$, this.dataset = {}, this.context = a, this.init()
        }

        var e = c(133), f = Txplayer.$, g = Txplayer.util, h = (Txplayer.apiList, c(35).definitionMap);
        d.prototype = {
            init: function () {
                this.write(), this.addEventListener(), this.exportsModuleApis()
            }, write: function () {
                var a = {
                    hide: Txplayer.dataset.hideClass,
                    tips: "txp-ui-tips",
                    text: "txp-ui-tips-text",
                    close: "txp-ui-tips-close"
                }, b = f.tmpl(e, a);
                this.context.dataset.$playermod.append(b), this.dataset.$tips = this.context.dataset.$playermod.find('[data-role="' + a.tips + '"]'), this.dataset.$text = this.context.dataset.$playermod.find('[data-role="' + a.text + '"]'), this.dataset.$close = this.context.dataset.$playermod.find('[data-role="' + a.close + '"]')
            }, remove: function () {
                this.dataset.$tips.remove()
            }, stopTips: function () {
                this.context.msg.broadcast("hideUiTips"), this.dataset.trialMovie_TIMER && (clearInterval(this.dataset.trialMovie_TIMER), this.dataset.trialMovie_TIMER = null)
            }, dealVipTip: function (a) {
                var b, c = this, d = function () {
                    try {
                        b = c.context.config.flashCallFn({type: "getPayTip"})
                    } catch (a) {
                        g.showInfo("[updateTrialData.getTips.error]", a)
                    }
                    if (b) {
                        c.dataset.getTip_TIMER && (clearTimeout(c.dataset.getTip_TIMER), c.dataset.getTip_TIMER = null);
                        var e = b.match(/\[.*?\]/);
                        if (e) {
                            e = e[0];
                            var f = '<a href="javascript:;" data-action="openVIP" data-role="txp-ui-tips-openVIP">' + e.slice(1, -1) + "</a>";
                            b = b.replace(e, f)
                        }
                    } else c.dataset.getTip_TIMER && clearTimeout(c.dataset.getTip_TIMER), c.dataset.getTip_TIMER = setTimeout(function () {
                        b = d()
                    }, 1e3)
                }, e = function () {
                    c.context.dataset.isUiTipsShowing || c.context.dataset.isPlayingAd || (b || d(), b && c.context.msg.broadcast("showUiTips", {
                        text: b,
                        time: 300
                    }))
                };
                e(), this.dataset.trialMovie_TIMER && clearInterval(c.dataset.trialMovie_TIMER), this.dataset.trialMovie_TIMER = setInterval(function () {
                    e()
                }, 5e3)
            }, dealSeekTip: function (a) {
                var b, c = this;
                a && a.showTips ? (b = "<a>" + g.formatPlayTime(a.seekTime) + "</a>", c.context.msg.broadcast("showUiTips", {
                        text: "您上次观看至 " + b + " 处，正在为您续播",
                        time: 3,
                        hideClose: !0
                    })) : a.connectionPlayTime ? (b = "<a>" + g.formatPlayTime(a.connectionPlayTime) + "</a>", c.context.msg.broadcast("showUiTips", {
                            text: "您上次观看至 " + b + " 处，正在为您续播",
                            time: 3,
                            hideClose: !0
                        })) : a.playStartTime ? (b = "<a>" + g.formatPlayTime(a.playStartTime) + "</a>", c.context.msg.broadcast("showUiTips", {
                                text: "腾讯视频已为您跳过片头",
                                time: 3,
                                hideClose: !0
                            })) : a.historyTime && c.context.msg.broadcast("showUiTips", {
                                text: "您上次观看至 " + a.historyTime + " 处，正在为您续播",
                                time: 5
                            })
            }, dealDenitionTip: function () {
                var a = this;
                this.dataset.eventsList[g.getUniqueMsgKey("setDefinitionStart")] = function (b, c) {
                    if (c)return void a.context.msg.broadcast("showUiTips", {text: "正在缓冲...", time: 3, hideClose: !0});
                    var d = h[b];
                    d && (d = "<a>[" + d + "]</a>", a.context.msg.broadcast("showUiTips", {
                        text: "正在为您切换清晰度" + d,
                        time: 40
                    }))
                }, this.dataset.eventsList[g.getUniqueMsgKey("setDefinitionDone")] = function (b) {
                    a.context.msg.broadcast("hideUiTips")
                }, this.dataset.eventsList[g.getUniqueMsgKey("setDefinitionFail")] = function (b) {
                    a.context.msg.broadcast("showUiTips", {text: "sorry, 切换清晰度失败, 请稍后重试", time: 5})
                }
            }, dealPlaybackRateTip: function (a) {
                return a >= 4 ? void this.context.msg.broadcast("showUiTips", {
                        text: "播放速度已经达到最高值",
                        time: 3,
                        hideClose: !0
                    }) : a <= .4 ? void this.context.msg.broadcast("showUiTips", {
                            text: "播放速度已经达到最低值",
                            time: 3,
                            hideClose: !0
                        }) : void this.context.msg.broadcast("showUiTips", {
                            text: "当前播放速度:<a>" + a + "</a>",
                            time: 3,
                            hideClose: !0
                        })
            }, dealVolumeTip: function (a) {
                a.mute === !0 ? this.context.msg.broadcast("showUiTips", {
                        text: "视频静音",
                        time: 2,
                        hideClose: !0
                    }) : a.mute === !1 ? this.context.msg.broadcast("showUiTips", {
                            text: "取消视频静音",
                            time: 2,
                            hideClose: !0
                        }) : a.volume >= 0 && this.context.msg.broadcast("showUiTips", {
                            text: "当前音量: <a>" + a.volume + "</a>",
                            time: 3,
                            hideClose: !0
                        })
            }, addEventListener: function () {
                var a = this;
                this.dataset.$close.on("click", function () {
                    a.context.msg.broadcast("hideUiTips")
                }), this.dataset.eventsList = {}, this.dealDenitionTip(), this.dataset.eventsList[g.getUniqueMsgKey("vidChange")] = function () {
                    a.stopTips()
                }, f.each(this.dataset.eventsList, function (b, c) {
                    a.context.msg.on(b, c)
                }), a.context.userMsg.on("showUIVipGuide", function (b) {
                    a.stopTips()
                })
            }, exportsModuleApis: function () {
                var a = this;
                this.dataset.moduleApis = {}, this.dataset.moduleApis.showUiTips = function (b) {
                    b && b.text && (a.context.dataset.isSmallWindowMode || (b.time = b.time || 4, "undefined" === f.type(b.hideClose) && (b.hideClose = !1), b.hideClose ? a.dataset.$close.addClass(Txplayer.dataset.hideClass) : a.dataset.$close.removeClass(Txplayer.dataset.hideClass), a.dataset.$tips.removeClass(Txplayer.dataset.hideClass), a.dataset.$text.html(b.text), a.context.dataset.isUiTipsShowing = !a.dataset.$tips.hasClass(Txplayer.dataset.hideClass), a.dataset.hide_TIMER && clearTimeout(a.dataset.hide_TIMER), a.dataset.hide_TIMER = setTimeout(function () {
                        a.context.msg.broadcast("hideUiTips")
                    }, 1e3 * b.time)))
                }, this.dataset.moduleApis.hideUiTips = function (b) {
                    a.dataset.$tips.addClass(Txplayer.dataset.hideClass), a.context.dataset.isUiTipsShowing = !a.dataset.$tips.hasClass(Txplayer.dataset.hideClass)
                }, this.dataset.moduleApis.showUIVipTip = function (b) {
                    a.dealVipTip(b)
                }, this.dataset.moduleApis.showUiSeekTip = function (b) {
                    a.dealSeekTip(b)
                }, this.dataset.moduleApis.showUiRateTip = function (b) {
                    a.dealPlaybackRateTip(b)
                }, this.dataset.moduleApis.showUiPlaybackRateTip = function (b) {
                    a.dealPlaybackRateTip(b)
                }, this.dataset.moduleApis.showUiVolumeTip = function (b) {
                    a.dealVolumeTip(b)
                }, f.each(this.dataset.moduleApis, function (b, c) {
                    a.context.msg.on(b, c)
                })
            }
        }, Txplayer.register("UiTips", d)
    },

    133: function (a, b) {
        a.exports = '<txpdiv data-role="<%=tips%>" class="txp_alert_info <%=hide%>">\n  <txpdiv class="txp_alert_content">\n    <txpdiv data-role="<%=text%>" class="txp_alert_text"></txpdiv>\n    <button data-role="<%=close%>" class="txp_btn txp_btn_close" title="关闭"></button>\n  </txpdiv>\n</txpdiv>'
    }
});
/*! Txplayer - v3.0.0 - 2016-12-30 16:40:14
 * Copyright (c) 2016
 * Powered by Tencent-Video Web Front End Team
 */
!function (a) {
    function b(d) {
        if (c[d])return c[d].exports;
        var e = c[d] = {exports: {}, id: d, loaded: !1};
        return a[d].call(e.exports, e, e.exports, b), e.loaded = !0, e.exports
    }

    var c = {};
    return b.m = a, b.c = c, b.p = "", b(0)
}({
    0: function (a, b, c) {
        a.exports = c(91)
    },

    91: function (a, b, c) {
        function d(a) {
            f = Txplayer.$, this.dataset = {}, this.context = a, this.init()
        }

        var e = c(92), f = Txplayer.$, g = Txplayer.util;
        d.prototype = {
            init: function () {
                this.dataset.controlHideClass = "txp_autohide", this.context.dataset.isControlShow = !0, this.write(), this.addEventListener(), this.exportsModuleApis(), this.loadSubPlugins()
            }, write: function () {
                var a = {
                    controlWrap: "txp-control-wrap",
                    progressRole: "txp-control-progress",
                    buttonsLeftRole: "txp-control-left",
                    buttonsRightRole: "txp-control-right",
                    hide: Txplayer.dataset.hideClass,
                    autoHide: this.dataset.controlHideClass
                }, b = f.tmpl(e, a);
                this.context.dataset.$playermod.append(b), this.dataset.$playermod = this.context.dataset.$playermod, this.dataset.$controlWrap = this.context.dataset.$playermod.find('[data-role="' + a.controlWrap + '"]'), this.dataset.$progressmod = this.context.dataset.$playermod.find('[data-role="' + a.progressRole + '"]'), this.dataset.$buttonsleftmod = this.context.dataset.$playermod.find('[data-role="' + a.buttonsLeftRole + '"]'), this.dataset.$buttonsrightmod = this.context.dataset.$playermod.find('[data-role="' + a.buttonsRightRole + '"]'), (this.context.config.autoplay || g.mobile) && (this.context.dataset.$playermod.addClass(this.dataset.controlHideClass), this.context.dataset.isControlShow = !1)
            }, remove: function () {
                this.dataset.$controlWrap.remove()
            }, loadSubPlugins: function () {
                var a = [];
                this.context.pluginConfig && "array" === f.type(this.context.pluginConfig.subPlugins) && (a = this.context.pluginConfig.subPlugins.slice(0));
                var b = {
                    msg: this.context.msg,
                    userMsg: this.context.userMsg,
                    userApi: this.context.userApi,
                    privateApi: this.context.privateApi,
                    dataset: this.context.dataset,
                    config: this.context.config,
                    $mod: {
                        $playermod: this.dataset.$playermod,
                        $progressmod: this.dataset.$progressmod,
                        $buttonsleftmod: this.dataset.$buttonsleftmod,
                        $buttonsrightmod: this.dataset.$buttonsrightmod
                    }
                };
                g.loadPlugins.call(this, a, b, this.context.config.settings)
            }, handlerUiControlShowHide: function () {
                function a(a) {
                    if (a = a || {}, a && !a.force) {
                        if (1 !== e.context.dataset.playState && !e.context.dataset.isPlayingAd)return;
                        if (e.context.dataset.isSmallWindowMode)return;
                        if (e.context.dataset.isFocusVideoBufferIng)return;
                        if (e.context.dataset.isFocusVideoSeeking)return
                    }
                    e.context.dataset.$playermod.addClass(e.dataset.controlHideClass), e.context.msg.broadcast("hideUiControl"), e.context.dataset.isControlShow = !1, e.dataset.hideControl_TIMER && (clearTimeout(e.dataset.hideControl_TIMER), e.dataset.hideControl_TIMER = null)
                }

                function b() {
                    return !e.context.dataset.$playermod.hasClass(e.dataset.controlHideClass)
                }

                function c(a) {
                    a = a || {}, a && !a.force && e.context.dataset.isSmallWindowMode || (e.context.msg.broadcast("beforeUiControlShow"), e.context.dataset.$playermod.removeClass(e.dataset.controlHideClass), e.context.dataset.isControlShow = !0, d())
                }

                function d() {
                    e.dataset.hideControl_TIMER && (clearTimeout(e.dataset.hideControl_TIMER), e.dataset.hideControl_TIMER = null), e.dataset.hideControl_TIMER = setTimeout(function () {
                        e.context.dataset.disableHideControl || a()
                    }, 3e3)
                }

                var e = this;
                this.dataset.hideControl_TIMER = null, g.mobile ? this.context.msg.on("ready", function () {
                        e.context.dataset.$shadow.on("touchend", function () {
                            b() ? a() : c()
                        })
                    }) : (this.dataset.$playermod.on("click mouseenter", function (a) {
                        c()
                    }), this.dataset.$playermod.on("blur mouseleave", function (b) {
                        a()
                    }), this.dataset.$playermod.on("mousemove", function (a) {
                        e.dataset.screenX == a.screenX && e.dataset.screenY == a.screenY || (e.dataset.screenX = a.screenX, e.dataset.screenY = a.screenY, c())
                    })), this.dataset.eventsList[g.getUniqueMsgKey("videoPause")] = function (a) {
                    a && a.end || c()
                }, this.dataset.eventsList[g.getUniqueMsgKey("videoPlaying")] = function () {
                    d()
                }, this.dataset.eventsList[g.getUniqueMsgKey("smallWindowModeChange")] = function (b) {
                    b && b.isSmallWindow && a({force: !0})
                }, f.each(this.dataset.eventsList, function (a, b) {
                    e.context.msg.on(a, b)
                })
            }, addEventListener: function () {
                this.dataset.eventsList = {}, this.handlerUiControlShowHide()
            }, exportsModuleApis: function () {
            }
        }, Txplayer.register("UiControl", d)
    },

    92: function (a, b) {
        a.exports = '<txpdiv data-role="<%=controlWrap%>" class="txp_bottom">\n  <txpdiv class="txp_progress_bar_container" data-role="<%=progressRole%>"></txpdiv>\n  <txpdiv class="txp_controls">\n    <txpdiv class="txp_left_controls" data-role="<%=buttonsLeftRole%>"></txpdiv>\n    <txpdiv class="txp_right_controls" data-role="<%=buttonsRightRole%>"></txpdiv>\n  </txpdiv>\n</txpdiv>'
    }
});
/*! Txplayer - v3.0.0 - 2016-12-30 16:40:14
 * Copyright (c) 2016
 * Powered by Tencent-Video Web Front End Team
 */
!function (a) {
    function b(d) {
        if (c[d])return c[d].exports;
        var e = c[d] = {exports: {}, id: d, loaded: !1};
        return a[d].call(e.exports, e, e.exports, b), e.loaded = !0, e.exports
    }

    var c = {};
    return b.m = a, b.c = c, b.p = "", b(0)
}({
    0: function (a, b, c) {
        a.exports = c(122)
    },

    122: function (a, b, c) {
        function d(a) {
            e = Txplayer.$, this.dataset = {}, this.context = a, this.init()
        }

        var e = Txplayer.$, f = Txplayer.util, g = (Txplayer.apiList, c(123));
        d.prototype = {
            init: function () {
                this.write(), this.addEventListerner()
            }, write: function () {
                var a = {
                    loadedProgress: "txp-control-load-progress",
                    playedProgress: "txp-control-play-progress",
                    playedPoint: "txp-control-play-point",
                    progressList: "txp-control-progress-list",
                    progressIndicator: "txp-control-progress-indicator",
                    tabindex: Txplayer.dataset.tabindex++
                };
                this.dataset.renderData = a;
                var b = e.tmpl(g, a);
                this.context.$mod.$progressmod.append(b), this.dataset.$loadedProgress = this.context.$mod.$progressmod.find('[data-role="' + a.loadedProgress + '"]'), this.dataset.$playprogress = this.context.$mod.$progressmod.find('[data-role="' + a.playedProgress + '"]'), this.dataset.$playpoint = this.context.$mod.$progressmod.find('[data-role="' + a.playedPoint + '"]'), this.dataset.$progressIndicator = this.context.$mod.$progressmod.find('[data-role="' + a.progressIndicator + '"]'), this.dataset.$progressList = this.context.$mod.$progressmod.find('[data-role="' + a.progressList + '"]')
            }, remove: function () {
                this.dataset.$loadedProgress.remove(), this.dataset.$playprogress.remove(), this.dataset.$playpoint.remove(), this.dataset.$progressIndicator.remove(), this.dataset.$progressList.remove()
            }, progressOnMouseMove: function () {
                var a, b, c, d = !1, f = this, g = -1, h = !1, i = function (b) {
                    e(b.target).data("role") === f.dataset.renderData.progressList || "txp-control-progress" === e(b.target).data("role") ? g = b.offsetX : e(b.target).data("role") === f.dataset.renderData.progressIndicator ? g = b.target.offsetLeft + b.target.offsetParent.offsetLeft + b.offsetX : (e(b.target).data("role") === f.dataset.renderData.playedPoint || e(b.target).data("role") === f.dataset.renderData.playedProgress || e(b.target).data("role") === f.dataset.renderData.loadedProgress || e(b.target).hasClass("txp_interact_dot")) && (g = b.target.offsetLeft + b.offsetX), g !== -1 && (c = parseInt(g / a * 1e4) / 100)
                }, j = function () {
                    var c = parseInt(g / a * 1e4) / 100, d = 0 === g ? 0 : parseInt((g - b / 2) / a * 1e4) / 100;
                    f.dataset.$playprogress.css("width", c + "%"), f.dataset.$playpoint.css("left", d + "%")
                };
                this.context.$mod.$progressmod.on("mouseenter", function () {
                    f.context.dataset.isPlayingAd || f.isVideoCanNotPlay() || (d = !0, a = f.dataset.$progressList.width(), b = f.dataset.$progressIndicator.width())
                }).on("mouseleave", function () {
                    f.context.dataset.isPlayingAd || (h && (f.context.msg.broadcast("playControl"), h = !1), d = !1)
                }).on("mousedown", function (a) {
                    f.context.dataset.isPlayingAd || f.isVideoCanNotPlay() || (h = !0, d = !0, f.context.msg.broadcast("pause"), i(a), j())
                }).on("mousemove", function (a) {
                    f.context.dataset.isPlayingAd || f.isVideoCanNotPlay() || (i(a), h && d && j())
                }).on("mouseup touchend", function (b) {
                    if (!f.dataset.duration)return void(h = !1);
                    if (!f.context.dataset.isPlayingAd && h) {
                        f.context.dataset.playState;
                        i(b);
                        var c = parseInt(f.dataset.duration * (g / a));
                        j(), f.context.msg.broadcast("seekTo", c), d = !1, h = !1
                    }
                })
            }, isVideoCanNotPlay: function () {
                var a = this.context.dataset.playState;
                return 0 === a || a === -1
            }, progressOnTouch: function () {
                var a, b, c, d, e = this, f = function () {
                    var a = parseInt(b / c * 1e4) / 100, f = parseInt((b - d / 2) / c * 1e4) / 100;
                    e.dataset.$playprogress.css("width", a + "%"), e.dataset.$playpoint.css("left", f + "%"), e.context.msg.broadcast("progressUpdate", a)
                };
                this.context.$mod.$progressmod.on("touchstart", function (g) {
                    e.context.dataset.isPlayingAd || (g = g.originalEvent ? g.originalEvent : g, g && g.touches && g.touches.length && (g = g.touches[0], a = e.dataset.$progressList.offset().left, b = g.pageX - a, c = e.dataset.$progressList.width(), d = e.dataset.$progressIndicator.width(), f(), e.context.dataset.isControlTouch = !0, e.context.msg.broadcast("pause")))
                }).on("touchmove", function (c) {
                    e.context.dataset.isPlayingAd || (c = c.originalEvent ? c.originalEvent : c, c && c.touches && c.touches.length && (c.preventDefault(), c = c.touches[0], b = c.pageX - a, b > e.dataset.$progressList.width() ? b = e.dataset.$progressList.width() : b < 0 && (b = 0), f(), e.context.dataset.isControlTouch = !0))
                }).on("touchend", function (a) {
                    if (!e.context.dataset.isPlayingAd) {
                        var d = parseInt(e.dataset.duration * (b / c));
                        d >= e.dataset.duration && (d = e.dataset.duration - 1), f(), e.context.dataset.isControlTouch = !1, e.context.msg.broadcast("seekTo", d)
                    }
                })
            }, updateBufferedBar: function (a) {
                if (this.dataset.duration && a) {
                    var b = parseInt(100 * a / this.dataset.duration);
                    this.dataset.$loadedProgress.css({width: b + "%"})
                }
            }, addEventListerner: function () {
                var a = this, b = a.context.dataset.duration;
                b && (a.dataset.duration = b), this.dataset.eventsList = {}, this.dataset.eventsList[f.getUniqueMsgKey("getVideoUrlSuccess")] = function () {
                    var b = a.context.dataset.duration;
                    a.dataset.duration = b
                }, this.dataset.eventsList[f.getUniqueMsgKey("videoTimeUpdate")] = function (b) {
                    if (!a.context.dataset.isPlayingAd && a.dataset.duration && !a.context.dataset.isFocusVideoSeeking) {
                        var c = a.context.dataset.currentTime, d = c / a.dataset.duration;
                        d = 100 * d + "%", a.dataset.$playprogress.css("width", d), a.dataset.$playpoint.css("left", d), a.updateBufferedBar(a.context.dataset.bufferedTime)
                    }
                }, this.dataset.eventsList[f.getUniqueMsgKey("videoProgress")] = function () {
                    a.updateBufferedBar(a.context.dataset.bufferedTime)
                }, this.dataset.eventsList[f.getUniqueMsgKey("vidChange")] = function () {
                    a.dataset.$loadedProgress.css({width: "0%"}), a.dataset.$playprogress.css("width", "0%"), a.dataset.$playpoint.css("left", "0%")
                }, this.dataset.eventsList[f.getUniqueMsgKey("videoPlaying")] = function (b) {
                    b && "endingad" === b.playListType && (a.dataset.$loadedProgress.css({width: "0%"}), a.dataset.$playprogress.css("width", "0%"), a.dataset.$playpoint.css("left", "0%"))
                }, this.dataset.eventsList[f.getUniqueMsgKey("videoEnd")] = function (b) {
                    b && b.isAllEnd && (a.dataset.$loadedProgress.css({width: "0%"}), a.dataset.$playprogress.css("width", "0%"), a.dataset.$playpoint.css("left", "0%"))
                }, this.dataset.eventsList[f.getUniqueMsgKey("speedyTouchmove")] = function (b) {
                    var c = 100 * b / a.dataset.duration + "%";
                    a.dataset.$playprogress.css("width", c), a.dataset.$playpoint.css("left", c)
                }, e.each(this.dataset.eventsList, function (b, c) {
                    a.context.msg.on(b, c)
                }), f.mobile ? this.progressOnTouch() : this.progressOnMouseMove()
            }
        }, Txplayer.register("UiProgress", d)
    },

    123: function (a, b) {
        a.exports = '<txpdiv class="txp_progress_list" data-role="<%=progressList%>">\n  <txpdiv class="txp_progress_load" style="width:0%" data-role="<%=loadedProgress%>"></txpdiv>\n  <txpdiv class="txp_progress_play" style="width:0%" data-role="<%=playedProgress%>"></txpdiv>\n</txpdiv>\n\n<txpdiv class="txp_btn_scrubber" style="left:0%" data-role="<%=playedPoint%>">\n  <txpdiv class="txp_scrubber_indicator" data-role="<%=progressIndicator%>"></txpdiv>\n</txpdiv>'
    }
});
/*! Txplayer - v3.0.0 - 2016-12-30 16:40:14
 * Copyright (c) 2016
 * Powered by Tencent-Video Web Front End Team
 */
!function (a) {
    function b(d) {
        if (c[d])return c[d].exports;
        var e = c[d] = {exports: {}, id: d, loaded: !1};
        return a[d].call(e.exports, e, e.exports, b), e.loaded = !0, e.exports
    }

    var c = {};
    return b.m = a, b.c = c, b.p = "", b(0)
}({
    0: function (a, b, c) {
        a.exports = c(93)
    },

    93: function (a, b, c) {
        function d(a) {
            e = Txplayer.$, this.dataset = {}, this.context = a, this.init()
        }

        var e = Txplayer.$, f = Txplayer.util, g = c(94);
        d.prototype = {
            init: function () {
                this.write(), this.addEventListener()
            }, write: function () {
                var a = {
                    playBtn: "txp-ui-control-playbtn",
                    tips: "txp-ui-control-playbtn-tips",
                    isUseH5Type: f.isUseH5Type(),
                    tabindex: Txplayer.dataset.tabindex++
                }, b = e.tmpl(g, a);
                this.context.$mod.$buttonsleftmod.append(b), this.dataset.$playbtn = this.context.$mod.$buttonsleftmod.find('[data-role="' + a.playBtn + '"]'), this.dataset.$tips = this.context.$mod.$buttonsleftmod.find('[data-role="' + a.tips + '"]')
            }, remove: function () {
                this.dataset.$playbtn.remove()
            }, initPlayState: function () {
                var a = this.context.dataset.playState;
                1 === a || 3 === a ? (this.dataset.$playbtn.attr("data-status", "pause"), this.dataset.$tips.html("暂停")) : 0 === a ? (this.dataset.$playbtn.attr("data-status", "replay"), this.dataset.$tips.html("重新播放")) : (this.dataset.$playbtn.attr("data-status", "play"), this.dataset.$tips.html("播放"))
            }, bindMouseEvent: function () {
                var a = this;
                this.dataset.$playbtn.on("mouseenter", function () {
                    a.dataset.$playbtn.addClass(Txplayer.dataset.btnHoverClass)
                }).on("mouseleave", function () {
                    a.dataset.$playbtn.removeClass(Txplayer.dataset.btnHoverClass)
                })
            }, addEventListener: function () {
                var a = this;
                this.initPlayState(), this.dataset.$playbtn.on(Txplayer.dataset.clickEventName, function () {
                    var b = (e(this), a.context.dataset.isPlayingAd);
                    b || ("pause" === a.dataset.$playbtn.attr("data-status") ? (a.context.msg.broadcast("pause"), a.context.msg.broadcast("userPausePlayer")) : ("replay" === a.dataset.$playbtn.attr("data-status") && a.context.msg.broadcast("beforeVideoRePlay"), a.context.msg.broadcast("playControl", {connectionPlayType: 1}), a.context.msg.broadcast("userPlayPlayer")))
                }), this.dataset.eventsList = {}, this.dataset.eventsList[f.getUniqueMsgKey("videoPlay")] = function () {
                    a.dataset.$playbtn.attr("data-status", "pause"), a.dataset.$tips.html("暂停")
                }, this.dataset.eventsList[f.getUniqueMsgKey("videoPause")] = function (b) {
                    b && "film" != b.playListType || (a.dataset.$playbtn.attr("data-status", "play"), a.dataset.$tips.html("播放"))
                }, this.dataset.eventsList[f.getUniqueMsgKey("videoEnd")] = function (b) {
                    b && b.isAllEnd && (a.context.dataset.canPlayTime || (a.dataset.$playbtn.attr("data-status", "replay"), a.dataset.$playbtn.removeClass("txp_disabled"), a.dataset.$tips.html("重新播放")))
                }, this.dataset.eventsList[f.getUniqueMsgKey("vidChange")] = function (b) {
                    a.dataset.$playbtn.attr("data-status", "play"), a.dataset.$tips.html("播放")
                }, this.dataset.eventsList[f.getUniqueMsgKey("videoPlaying")] = function (b) {
                    if (b && "film" != b.playListType) {
                        if (a.dataset.$playbtn.hasClass("txp_disabled"))return;
                        a.dataset.$playbtn.addClass("txp_disabled")
                    } else a.dataset.$playbtn.removeClass("txp_disabled")
                }, e.each(this.dataset.eventsList, function (b, c) {
                    a.context.msg.on(b, c)
                }), f.mobile || this.bindMouseEvent()
            }
        }, Txplayer.register("UiControlPlay", d)
    },

    94: function (a, b) {
        a.exports = '<button data-role="<%=playBtn%>" class="txp_btn txp_btn_play" data-status="play" aria-label="播放/暂停">\n  <% if(isUseH5Type){ %>\n  <svg class="txp_icon txp_icon_play" viewBox="0 0 60 60" >\n\t<use class="txp_svg_play" xlink:href="#txp_svg_play" />\n\t<use class="txp_svg_pause" xlink:href="#txp_svg_pause" />\n\t<use class="txp_svg_stop" xlink:href="#txp_svg_stop" />\n\t<use class="txp_svg_replay" xlink:href="#txp_svg_replay" />\n  </svg>\n  <% }else{%>\n  <svg class="txp_icon txp_icon_play" version="1.1" viewBox="0 0 36 36">\n    <use class="txp_svg_symbol txp_svg_play" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#txp_svg_play"></use>\n    <use class="txp_svg_symbol txp_svg_pause" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#txp_svg_pause"></use>\n    <use class="txp_svg_symbol txp_svg_stop" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#txp_svg_stop"></use>\n    <use class="txp_svg_symbol txp_svg_replay" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#txp_svg_replay"></use>\n  </svg>\n  <txpdiv data-role="<%=tips%>" class="txp_tooltip">播放</txpdiv>\n  <% } %>\n</button>'
    }
});
/*! Txplayer - v3.0.0 - 2016-12-30 16:40:14
 * Copyright (c) 2016
 * Powered by Tencent-Video Web Front End Team
 */
!function (a) {
    function b(d) {
        if (c[d])return c[d].exports;
        var e = c[d] = {exports: {}, id: d, loaded: !1};
        return a[d].call(e.exports, e, e.exports, b), e.loaded = !0, e.exports
    }

    var c = {};
    return b.m = a, b.c = c, b.p = "", b(0)
}({
    0: function (a, b, c) {
        a.exports = c(114)
    },

    114: function (a, b, c) {
        function d(a) {
            e = Txplayer.$, this.dataset = {}, this.context = a, this.init()
        }

        var e = Txplayer.$, f = Txplayer.util, g = c(115), h = c(116), i = c(117);
        Txplayer.apiList;
        d.prototype = {
            init: function () {
                this.dataset.playerConfig = this.context.config, this.dataset.nextData = null, this.context.dataset.nextVid = this.dataset.playerConfig.nextVid, this.dataset.getNextVid = "function" === e.type(this.dataset.playerConfig.getNextVid) ? this.dataset.playerConfig.getNextVid : e.noop, this.write(), this.addEventListerner(), this.exportsModuleApis()
            }, write: function () {
                var a = {
                    next: "txp-ui-control-play-next",
                    hideClass: Txplayer.dataset.hideClass,
                    tabindex: Txplayer.dataset.tabindex++,
                    nextTip: "txp-next-tip"
                };
                this.dataset.renderData = a;
                var b = e.tmpl(g, a);
                this.context.$mod.$buttonsleftmod.append(b), this.dataset.$next = this.context.$mod.$buttonsleftmod.find('[data-role="' + a.next + '"]'), this.dataset.$nextTip = this.context.$mod.$buttonsleftmod.find('[data-role="' + a.nextTip + '"]');
                var c = {
                    tipMod: "txp-next-tip-mod",
                    tipText: "txp-next-tip-text",
                    tipPreview: "txp-next-tip-preview",
                    hideClass: Txplayer.dataset.hideClass
                }, d = e.tmpl(h, c);
                this.context.$mod.$playermod.append(d), this.dataset.$tipMod = this.context.$mod.$playermod.find('[data-role="' + c.tipMod + '"]'), this.dataset.$tipText = this.dataset.$tipMod.find('[data-role="' + c.tipText + '"]'), this.dataset.$tipPreview = this.dataset.$tipMod.find('[data-role="' + c.tipPreview + '"]');
                var f = {
                    tipContentMod: "txp-next-tip-content-mod",
                    tipContentText: "txp-next-tip-content-text",
                    tipContentCancle: "txp-next-tip-content-cancle",
                    tipContentPlay: "txp-next-tip-content-play",
                    tipContentPoster: "txp-next-tip-content-poster",
                    hideClass: Txplayer.dataset.hideClass
                }, j = e.tmpl(i, f);
                this.context.$mod.$playermod.append(j), this.dataset.$tipContentMod = this.context.$mod.$playermod.find('[data-role="' + f.tipContentMod + '"]'), this.dataset.$tipContentText = this.dataset.$tipContentMod.find('[data-role="' + f.tipContentText + '"]'), this.dataset.$tipContentCancle = this.dataset.$tipContentMod.find('[data-role="' + f.tipContentCancle + '"]'), this.dataset.$tipContentPlay = this.dataset.$tipContentMod.find('[data-role="' + f.tipContentPlay + '"]'), this.dataset.$tipContentPoster = this.dataset.$tipContentMod.find('[data-role="' + f.tipContentPoster + '"]')
            }, remove: function () {
                this.dataset.$next.remove(), this.dataset.$tipMod.remove(), this.dataset.$tipContentMod.remove()
            }, initDisplay: function () {
                this.context.dataset.nextVid === !0 ? (this.dataset.$next.removeClass(Txplayer.dataset.hideClass), this.dataset.$next.removeClass("txp_disabled"), this.writeTips()) : this.context.dataset.nextVid === !1 ? (this.dataset.$tipMod.addClass(Txplayer.dataset.hideClass), this.dataset.$nextTip.addClass(Txplayer.dataset.hideClass), this.dataset.$next.addClass(Txplayer.dataset.hideClass)) : (this.dataset.$next.removeClass(Txplayer.dataset.hideClass), this.dataset.$next.addClass("txp_disabled"))
            }, writeTips: function () {
                this.dataset.nextData && this.dataset.nextData.title && this.dataset.nextData.preview && (this.dataset.$tipText.html(this.dataset.nextData.title), this.dataset.$tipContentText.html(this.dataset.nextData.title), this.dataset.$tipPreview.attr("src", this.dataset.nextData.preview)), this.dataset.nextData && this.dataset.nextData.previewPoster && this.dataset.$tipContentPoster.css({"background-image": "url(" + this.dataset.nextData.previewPoster + ")"})
            }, canclePlayTheNext: function () {
                this.dataset.isCancle = !0, this.dataset.$tipContentMod.addClass(Txplayer.dataset.hideClass)
            }, doPlayTheNext: function (a) {
                var b = this;
                this.context.userMsg.broadcast("beforePlayNext", {vid: a || b.dataset.nextData.pageUrl}), this.dataset.$tipContentMod.addClass(Txplayer.dataset.hideClass)
            }, playTheNext: function (a) {
                if (f.showInfo("uiPlayNext.playTheNext", a), a = a || {}, this.context.dataset.nextVid === !0) {
                    var b, c = this, d = this.context.dataset.vid;
                    try {
                        b = c.dataset.getNextVid(d)
                    } catch (e) {
                        f.showInfo("[playTheNext.getNextVid.error]", e)
                    }
                    if (!b || !b.vid)return void f.showError("播放下个视频失败", "找不到vid");
                    if (c.dataset.nextData && c.dataset.nextData.pageUrl && a.isAllEnd && !f.os.ipad)return this.dataset.$tipContentMod.removeClass(Txplayer.dataset.hideClass), void setTimeout(function () {
                        c.dataset.isCancle || c.doPlayTheNext(c.dataset.nextData.pageUrl)
                    }, 3e3);
                    if (c.dataset.nextData && c.dataset.nextData.pageUrl)return void c.context.userMsg.broadcast("beforePlayNext", {vid: b.pageUrl});
                    if (11 === b.vid.length) {
                        c.context.userMsg.broadcast("beforePlayNext", {vid: b.vid});
                        var g = {
                            vid: b.vid,
                            nextVid: b.nextVid,
                            bullet: b.bullet,
                            bulletId: b.bulletId,
                            duration: b.duration,
                            playStartTime: b.playStartTime,
                            playEndTime: b.playEndTime,
                            isNeedPay: b.isNeedPay,
                            title: b.title,
                            autoplay: !b.hasOwnProperty("autoplay") || b.autoplay,
                            defaultDefinition: b.defaultDefinition
                        };
                        a.hasOwnProperty("connectionPlayType") && (g.connectionPlayType = a.connectionPlayType), c.context.msg.broadcast("playControl", g)
                    }
                }
            }, showTip: function () {
                var a = this;
                a.dataset.nextData && a.dataset.nextData.title && a.dataset.nextData.preview ? a.dataset.$tipMod.removeClass(Txplayer.dataset.hideClass) : a.dataset.$nextTip.removeClass(Txplayer.dataset.hideClass), a.dataset.$next.addClass(Txplayer.dataset.btnHoverClass)
            }, hideTip: function () {
                var a = this;
                a.dataset.nextData && a.dataset.nextData.title && a.dataset.nextData.preview ? a.dataset.$tipMod.addClass(Txplayer.dataset.hideClass) : a.dataset.$nextTip.addClass(Txplayer.dataset.hideClass), a.dataset.$next.removeClass(Txplayer.dataset.btnHoverClass)
            }, bindMouseEvent: function () {
                var a = this;
                this.dataset.$next.on("mouseenter", function () {
                    a.showTip()
                }).on("mouseleave", function () {
                    a.hideTip()
                })
            }, addEventListerner: function () {
                var a = this;
                this.dataset.$next.on(Txplayer.dataset.clickEventName, function () {
                    a.context.dataset.nextVid && (a.hideTip(), a.playTheNext({connectionPlayType: 2}))
                }), this.dataset.$tipContentCancle.on(Txplayer.dataset.clickEventName, function () {
                    a.canclePlayTheNext()
                }), this.dataset.$tipContentPlay.on(Txplayer.dataset.clickEventName, function () {
                    a.doPlayTheNext()
                }), this.dataset.eventsList = {}, this.dataset.eventsList[f.getUniqueMsgKey("vidChange")] = function () {
                    a.dataset.isCancle = null, a.dataset.nextData = null, a.dataset.$tipContentMod.addClass(Txplayer.dataset.hideClass)
                }, this.dataset.eventsList[f.getUniqueMsgKey("hideUiControl")] = function () {
                    a.hideTip()
                }, this.dataset.eventsList[f.getUniqueMsgKey("videoEnd")] = function (b) {
                    b.isAllEnd && a.context.dataset.nextVid && !a.context.dataset.canPlayTime && a.playTheNext({
                        connectionPlayType: 2,
                        isAllEnd: !0
                    })
                }, e.each(this.dataset.eventsList, function (b, c) {
                    a.context.msg.on(b, c)
                }), f.mobile || this.bindMouseEvent()
            }, exportsModuleApis: function () {
                var a = this;
                this.dataset.moduleApis = {}, this.dataset.moduleApis.getNextData = function (b, c) {
                    return a.dataset.nextData
                }, this.dataset.moduleApis.setNextVid = function (b, c) {
                    if (a.context.dataset.nextVid = b.nextVid, a.context.dataset.nextVid === !0) {
                        var d, e = a.context.dataset.vid;
                        try {
                            d = a.dataset.getNextVid(e)
                        } catch (g) {
                            f.showInfo("[playTheNext.getNextVid.error]", g)
                        }
                        d && d.title && d.preview && (a.dataset.nextData = {
                            title: d.title,
                            preview: d.preview,
                            vid: e,
                            nextVid: d.vid
                        }, d.pageUrl && (a.dataset.nextData.pageUrl = d.pageUrl), d.previewPoster && (a.dataset.nextData.previewPoster = d.previewPoster))
                    }
                    a.initDisplay()
                }, e.extend(this.context.userApi, this.dataset.moduleApis), e.each(this.dataset.moduleApis, function (b, c) {
                    a.context.msg.on(b, c)
                })
            }
        }, Txplayer.register("UiPlayNext", d)
    },

    115: function (a, b) {
        a.exports = '<button data-role="<%=next%>" class="txp_btn txp_btn_next" data-report="play-next">\n  <svg class="txp_icon txp_icon_next" version="1.1" viewBox="0 0 36 36">\n    <use class="txp_svg_symbol txp_svg_next" xlink:href="#txp_svg_next" />\n  </svg>\n  <txpdiv class="txp_tooltip <%=hideClass%>" data-role="<%=nextTip%>">下一集</txpdiv>\n</button>'
    },

    116: function (a, b) {
        a.exports = '<txpdiv class="txp_hint_next <%=hideClass%>" data-role="<%=tipMod%>">\n<txpdiv class="txp_next_pic"><img data-role="<%=tipPreview%>" alt="" /></txpdiv>\n\t<txpdiv class="txp_next_wording">\n\t\t<txpdiv class="txp_label">下一个</txpdiv>\n\t\t<txpdiv class="txp_next_title" data-role="<%=tipText%>"></txpdiv>\n\t</txpdiv>\n</txpdiv>\n'
    },

    117: function (a, b) {
        a.exports = '<txpdiv class="txp_overlay_next <%=hideClass%>" data-role="<%=tipContentMod%>">\n<div class="txp_next_poster" data-role="<%=tipContentPoster%>" style="background-image:url()"></div>\n<txpdiv class="txp_next_content">\n\t<txpdiv class="txp_label">即将播放</txpdiv>\n\t<txpdiv class="txp_next_title" data-role="<%=tipContentText%>"></txpdiv>\n\t<a class="txp_cancel" href="#" data-role="<%=tipContentCancle%>">取消</a>\n\t<button class="txp_btn txp_btn_play_lg" data-status="play" data-role="<%=tipContentPlay%>">\n\t\t<svg class="txp_icon txp_icon_play" viewBox="0 0 36 36" >\n\t\t\t<use class="txp_svg_symbol txp_svg_play" xlink:href="#txp_svg_play" />\n\t\t</svg>\n\t\t<svg class="txp_icon_cirlce" viewBox="0 0 72 72" >\n\t\t\t<circle r="34" cy="36" cx="36"></circle>\n\t\t</svg>\n\t</button>\n</txpdiv>\n</txpdiv>'
    }
});
/*! Txplayer - v3.0.0 - 2016-12-30 16:40:14
 * Copyright (c) 2016
 * Powered by Tencent-Video Web Front End Team
 */
!function (a) {
    function b(d) {
        if (c[d])return c[d].exports;
        var e = c[d] = {exports: {}, id: d, loaded: !1};
        return a[d].call(e.exports, e, e.exports, b), e.loaded = !0, e.exports
    }

    var c = {};
    return b.m = a, b.c = c, b.p = "", b(0)
}({
    0: function (a, b, c) {
        a.exports = c(130)
    },

    130: function (a, b, c) {
        function d(a) {
            e = Txplayer.$, this.dataset = {}, this.context = a, this.init()
        }

        var e = Txplayer.$, f = Txplayer.util, g = (Txplayer.apiList, c(131));
        d.prototype = {
            init: function () {
                this.write(), this.addEventListerner()
            }, write: function () {
                var a = {
                    time: "txp-control-time-mod",
                    currentTimeRole: "txp-control-currenttime",
                    durationRole: "txp-control-duration"
                }, b = e.tmpl(g, a);
                this.context.$mod.$buttonsleftmod.append(b), this.dataset.$time = this.context.$mod.$buttonsleftmod.find('[data-role="' + a.time + '"]'), this.dataset.$currenttime = this.context.$mod.$buttonsleftmod.find('[data-role="' + a.currentTimeRole + '"]'), this.dataset.$duration = this.context.$mod.$buttonsleftmod.find('[data-role="' + a.durationRole + '"]')
            }, remove: function () {
                this.dataset.$time.remove()
            }, updateDuration: function (a) {
                "undefined" === e.type(a) && (a = this.context.dataset.duration), "number" === e.type(a) && this.dataset.$duration.html(f.formatPlayTime(a))
            }, updateCurrentTime: function (a) {
                "undefined" === e.type(a) && (a = this.context.dataset.currentTime), "number" === e.type(a) && this.dataset.$currenttime.html(f.formatPlayTime(a))
            }, addEventListerner: function () {
                var a = this;
                a.updateDuration(), this.dataset.eventsList = {}, this.dataset.eventsList[f.getUniqueMsgKey("getVideoUrlSuccess")] = function () {
                    a.updateDuration()
                }, this.dataset.eventsList[f.getUniqueMsgKey("vidChange")] = function () {
                    a.updateCurrentTime(0), a.updateDuration(0)
                }, this.dataset.eventsList[f.getUniqueMsgKey("videoEnd")] = function (b) {
                    b && "film" === b.playListType && b.playListTypeEnd && (a.context.dataset.canPlayTime ? a.updateCurrentTime(a.context.dataset.canPlayTime) : a.updateCurrentTime(0), a.updateDuration())
                }, this.dataset.eventsList.beforeVideoRePlay = function () {
                    a.updateDuration()
                }, this.dataset.eventsList[f.getUniqueMsgKey("videoTimeUpdate")] = function (b) {
                    a.context.dataset.isControlShow && (a.context.dataset.isPlayingAd || a.updateCurrentTime())
                }, this.dataset.eventsList[f.getUniqueMsgKey("beforeUiControlShow")] = function (b) {
                    a.context.dataset.isPlayingAd || a.updateCurrentTime()
                }, this.dataset.eventsList[f.getUniqueMsgKey("speedyTouchmove")] = function (b) {
                    a.updateCurrentTime(b)
                }, this.dataset.eventsList[f.getUniqueMsgKey("progressUpdate")] = function (b) {
                    var c = a.context.dataset.duration, d = c * b / 100 > c ? c : c * b / 100;
                    a.updateCurrentTime(d)
                }, this.dataset.eventsList[f.getUniqueMsgKey("seekStart")] = function (b) {
                    b && "number" === e.type(b.seekTime) && a.updateCurrentTime(b.seekTime)
                }, e.each(this.dataset.eventsList, function (b, c) {
                    a.context.msg.on(b, c)
                })
            }
        }, Txplayer.register("UiShowTime", d)
    },

    131: function (a, b) {
        a.exports = '<txpdiv data-role="<%=time%>" class="txp_time_display">\n  <txpdiv class="txp_time_current" data-role="<%=currentTimeRole%>">00:00</txpdiv>\n  <txpdiv class="txp_time_separator">/</txpdiv>\n  <txpdiv class="txp_time_duration" data-role="<%=durationRole%>">00:00</txpdiv>\n  <txpdiv class="txp_live_badge">直播</txpdiv>\n</txpdiv>'
    }
});
/*! Txplayer - v3.0.0 - 2016-12-30 16:40:14
 * Copyright (c) 2016
 * Powered by Tencent-Video Web Front End Team
 */
!function (a) {
    function b(d) {
        if (c[d])return c[d].exports;
        var e = c[d] = {exports: {}, id: d, loaded: !1};
        return a[d].call(e.exports, e, e.exports, b), e.loaded = !0, e.exports
    }

    var c = {};
    return b.m = a, b.c = c, b.p = "", b(0)
}({
    0: function (a, b, c) {
        a.exports = c(140)
    },

    140: function (a, b, c) {
        function d(a) {
            e = Txplayer.$, this.dataset = {}, this.context = a, this.init()
        }

        var e = Txplayer.$, f = Txplayer.util, g = (Txplayer.apiList, c(141));
        d.prototype = {
            init: function () {
                this.dataset.browserFullscreenClass = "txp_mode_fullscreen", this.context.dataset.isWindowFullscreen = !1, this.write(), this.addEventListerner(), this.exportsModuleApis()
            }, write: function () {
                var a = {
                    fullscreenBtn: "txp-ui-control-fullscreenbtn",
                    toolTip: "window-fullscreen",
                    tabindex: Txplayer.dataset.tabindex++
                }, b = e.tmpl(g, a);
                this.context.$mod.$buttonsrightmod.append(b), this.dataset.$fullscreenBtn = this.context.$mod.$buttonsrightmod.find('[data-role="' + a.fullscreenBtn + '"]'), this.dataset.$txp_tooltip = this.dataset.$fullscreenBtn.find('[data-role="' + a.toolTip + '"]'), this.dataset.$playermod = this.context.$mod.$playermod, this.dataset.$fullscreenContainer = this.context.$mod.$playermod[0]
            }, remove: function () {
                this.dataset.$fullscreenBtn.remove()
            }, toggleWindowFullScreen: function () {
                this.context.dataset.isWindowFullscreen ? this.exitWindowFullscreen() : this.enterWindowFullscreen()
            }, requestFullScreen: function (a, b, c) {
                a = a || this.dataset.$fullscreenContainer, b = b || "enter", "enter" === b ? (c = a.requestFullscreen || a.mozRequestFullScreen || a.webkitRequestFullscreen || a.webkitRequestFullscreen, c || (a = document, c = a.requestFullscreen || a.mozRequestFullScreen || a.webkitRequestFullscreen || a.webkitRequestFullscreen)) : (c = a.cancelFullScreen || a.mozCancelFullScreen || a.webkitCancelFullScreen || a.exitFullscreen || a.webkitExitFullscreen, c || (a = document, c = a.cancelFullScreen || a.mozCancelFullScreen || a.webkitCancelFullScreen || a.exitFullscreen || a.webkitExitFullscreen));
                try {
                    c ? c.call(a) : c || "enter" !== b || this.context.msg.broadcast("videoRequestFullScreen")
                } catch (d) {
                    f.showError("requestFullScreen error", d), this.context.msg.broadcast("reportError", {
                        msg: d.message,
                        code: Txplayer.define.reportCode.JS_ERROR,
                        stack: d.stack
                    })
                }
            }, isFullScreen: function () {
                var a = document.mozFullScreen || document.webkitIsFullScreen;
                return a
            }, exitWindowFullscreen: function (a) {
                var b = this;
                b.dataset.$fullscreenBtn.attr("data-status", !1), b.context.dataset.isWindowFullscreen = !1, b.dataset.$txp_tooltip.html("全屏"), a || b.requestFullScreen(null, "exit")
            }, enterWindowFullscreen: function (a) {
                var b = this;
                b.context.msg.broadcast("exitBrowserFullscreen", {noUpdateClass: !0}), b.dataset.$fullscreenBtn.attr("data-status", !0), b.context.dataset.isWindowFullscreen = !0, b.dataset.$txp_tooltip.html("退出全屏"), b.context.dataset.isShowBulletRegion ? e("html").addClass("txp_html_barrage_on") : e("html").removeClass("txp_html_barrage_on"), a || b.requestFullScreen(null, "enter")
            }, bindMouseEvent: function () {
                var a = this;
                this.dataset.$fullscreenBtn.on("mouseenter", function () {
                    a.dataset.$fullscreenBtn.addClass(Txplayer.dataset.btnHoverClass)
                }).on("mouseleave", function () {
                    a.dataset.$fullscreenBtn.removeClass(Txplayer.dataset.btnHoverClass)
                })
            }, addEventListerner: function () {
                var a = this;
                this.dataset.$fullscreenBtn.on(Txplayer.dataset.clickEventName, function () {
                    a.toggleWindowFullScreen()
                }), f.mobile || a.bindMouseEvent(), e(document).on("webkitfullscreenchange mozfullscreenchange fullscreenchange MSFullscreenChange", function (b) {
                    a.context.dataset.isWindowFullscreen = a.isFullScreen(), a.context.userMsg.broadcast("windowFullscreenChange", a.context.dataset.isWindowFullscreen), a.context.msg.broadcast("windowFullscreenChange", a.context.dataset.isWindowFullscreen), a.context.dataset.isWindowFullscreen ? (a.enterWindowFullscreen(!1), a.context.$mod.$playermod.addClass(a.dataset.browserFullscreenClass), e("html").addClass("txp_html_fullscreen")) : (a.exitWindowFullscreen(!1), a.context.$mod.$playermod.removeClass(a.dataset.browserFullscreenClass), e("html").removeClass("txp_html_fullscreen"))
                }), this.context.msg.on("closeAdClick", function () {
                    a.exitWindowFullscreen()
                }), this.context.msg.on("UiShadownDblClick", function () {
                    a.toggleWindowFullScreen()
                }), this.context.msg.on("webkitendfullscreen", function () {
                    a.exitWindowFullscreen()
                })
            }, exportsModuleApis: function () {
                var a = this;
                this.dataset.moduleApis = {}, this.dataset.moduleApis.toggleWindowFullScreen = a.toggleWindowFullScreen.bind(this), this.dataset.moduleApis.enterWindowFullscreen = a.enterWindowFullscreen.bind(this), this.dataset.moduleApis.exitWindowFullscreen = a.exitWindowFullscreen.bind(this), this.dataset.moduleApis.isWindowFullscreen = function () {
                    return a.context.dataset.isWindowFullscreen
                }, e.extend(this.context.userApi, this.dataset.moduleApis), e.each(this.dataset.moduleApis, function (b, c) {
                    a.context.msg.on(b, c)
                })
            }
        }, Txplayer.register("UiWindowFullScreen", d)
    },

    141: function (a, b) {
        a.exports = '<button class="txp_btn txp_btn_fullscreen" data-role="<%=fullscreenBtn%>" data-status="false" data-report="window-fullscreen">\n  <svg class="txp_icon txp_icon_fullscreen" version="1.1" viewBox="0 0 24 24">\n    <use class="txp_svg_symbol txp_svg_fullscreen" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#txp_svg_fullscreen"></use>\n    <use class="txp_svg_symbol txp_svg_fullscreen_true" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#txp_svg_fullscreen_true"></use>\n  </svg>\n  <txpdiv class="txp_tooltip" data-role="<%=toolTip%>">全屏</txpdiv>\n</button>\n'
    }
});
/*! Txplayer - v3.0.0 - 2016-12-30 16:40:14
 * Copyright (c) 2016
 * Powered by Tencent-Video Web Front End Team
 */
!function (a) {
    function b(d) {
        if (c[d])return c[d].exports;
        var e = c[d] = {exports: {}, id: d, loaded: !1};
        return a[d].call(e.exports, e, e.exports, b), e.loaded = !0, e.exports
    }

    var c = {};
    return b.m = a, b.c = c, b.p = "", b(0)
}({
    0: function (a, b, c) {
        a.exports = c(108)
    },

    108: function (a, b, c) {
        function d(a) {
            e = Txplayer.$, this.dataset = {}, this.context = a, this.init()
        }

        var e = Txplayer.$, f = Txplayer.util, g = (Txplayer.apiList, c(109));
        d.prototype = {
            init: function () {
                this.dataset.playerConfig = this.context.config, this.dataset.vidsList = this.dataset.playerConfig.vidsList, this.write(), this.initDisplay(), this.addEventListerner(), this.exportsModuleApis()
            }, initDisplay: function () {
                this.dataset.playerConfig.showLogo ? this.dataset.$logo.removeClass(Txplayer.dataset.hideClass) : this.dataset.$logo.addClass(Txplayer.dataset.hideClass)
            }, write: function () {
                var a = {
                    logo: "txp-ui-control-logo",
                    hideClass: Txplayer.dataset.hideClass,
                    tabindex: Txplayer.dataset.tabindex++
                };
                this.dataset.renderData = a;
                var b = e.tmpl(g, a);
                this.context.$mod.$buttonsrightmod.append(b), this.dataset.$logo = this.context.$mod.$buttonsrightmod.find('[data-role="' + a.logo + '"]')
            }, remove: function () {
                this.dataset.$logo.remove()
            }, openAtTencentVideo: function () {
                var a = this.context.dataset.vid, b = this.context.dataset.currentTime;
                if (a) {
                    var c = f.getTxVideoPageURLByVid(a, 0, b);
                    c && (f.showInfo("到 腾讯视频 播放", c), window.open(c))
                }
            }, addEventListerner: function () {
                var a = this;
                this.dataset.$logo.on("click", function () {
                    a.openAtTencentVideo()
                })
            }, exportsModuleApis: function () {
                var a = this;
                this.dataset.moduleApis = {}, this.dataset.moduleApis.openAtTencentVideo = function () {
                    a.openAtTencentVideo()
                }, e.each(this.dataset.moduleApis, function (b, c) {
                    a.context.msg.on(b, c)
                })
            }
        }, Txplayer.register("UiLogo", d)
    },

    109: function (a, b) {
        a.exports = '<a data-role="<%=logo%>" class="txp_btn txp_btn_logo <%=hideClass%>" data-report="click-logo">\n  <span class="txp_logo"></span>\n  <txpdiv class="txp_tooltip">到腾讯视频观看此视频</txpdiv>\n</a>'
    }
});
/*! Txplayer - v3.0.0 - 2016-12-30 16:40:14
 * Copyright (c) 2016
 * Powered by Tencent-Video Web Front End Team
 */
!function (a) {
    function b(d) {
        if (c[d])return c[d].exports;
        var e = c[d] = {exports: {}, id: d, loaded: !1};
        return a[d].call(e.exports, e, e.exports, b), e.loaded = !0, e.exports
    }

    var c = {};
    return b.m = a, b.c = c, b.p = "", b(0)
}({
    0: function (a, b, c) {
        a.exports = c(106)
    },

    106: function (a, b, c) {
        function d(a) {
            e = Txplayer.$, this.dataset = {}, this.context = a, this.init()
        }

        var e = Txplayer.$, f = Txplayer.util, g = (Txplayer.apiList, c(107));
        d.prototype = {
            init: function () {
                this.write(), this.addEventListerner()
            }, write: function () {
                var a = {
                    loading: "txp-ui-loading",
                    continuePlay: "txp-ui-continue-play",
                    hide: Txplayer.dataset.hideClass
                }, b = e.tmpl(g, a);
                this.context.dataset.$playermod.append(b), this.dataset.$loading = this.context.dataset.$playermod.find('[data-role="' + a.loading + '"]'), this.dataset.$continue = this.context.dataset.$playermod.find('[data-role="' + a.continuePlay + '"]')
            }, remove: function () {
                this.dataset.$loading.remove()
            }, hide: function () {
                this.dataset.$loading.addClass(Txplayer.dataset.hideClass)
            }, show: function () {
                this.dataset.$loading.removeClass(Txplayer.dataset.hideClass)
            }, addEventListerner: function () {
                var a = this;
                this.dataset.eventsList = {}, this.dataset.eventsList[f.getUniqueMsgKey("videoPlaying")] = function () {
                    a.hide()
                }, this.dataset.eventsList[f.getUniqueMsgKey("videoSeeked")] = function () {
                    a.hide()
                }, this.dataset.eventsList[f.getUniqueMsgKey("networkBadEnd")] = function () {
                    a.hide()
                }, this.dataset.eventsList[f.getUniqueMsgKey("videoLoadstart")] = function () {
                    a.show()
                }, this.dataset.eventsList[f.getUniqueMsgKey("videoSeeking")] = function () {
                    a.show()
                }, this.dataset.eventsList[f.getUniqueMsgKey("videoWaiting")] = function () {
                    a.show()
                }, this.dataset.eventsList[f.getUniqueMsgKey("networkBadStart")] = function () {
                    a.show()
                }, this.dataset.eventsList[f.getUniqueMsgKey("showContinuePlay")] = function (b) {
                    if ("number" == typeof b) {
                        var c = parseInt(b / 60), d = parseInt(b % 60), e = "上次观看至" + (c ? c + "分" : "") + d + "秒，正在为你续播";
                        a.dataset.$continue.text(e), a.dataset.$continue.removeClass(Txplayer.dataset.hideClass), setTimeout(function () {
                            a.dataset.$continue.addClass(Txplayer.dataset.hideClass)
                        }, 3e3)
                    }
                }, e.each(this.dataset.eventsList, function (b, c) {
                    a.context.msg.on(b, c)
                })
            }
        }, Txplayer.register("UiLoading", d)
    },

    107: function (a, b) {
        a.exports = '<txpdiv  class="txp_overlay_loading ">\n  <txpdiv class="txp_text <%=hide%>" data-role="<%=continuePlay%>"></txpdiv>\n  <txpdiv class="txp_icon_loading <%=hide%>" data-role="<%=loading%>"></txpdiv>\n</txpdiv>'
    }
});
/*! Txplayer - v3.0.0 - 2016-12-30 16:40:14
 * Copyright (c) 2016
 * Powered by Tencent-Video Web Front End Team
 */
!function (a) {
    function b(d) {
        if (c[d])return c[d].exports;
        var e = c[d] = {exports: {}, id: d, loaded: !1};
        return a[d].call(e.exports, e, e.exports, b), e.loaded = !0, e.exports
    }

    var c = {};
    return b.m = a, b.c = c, b.p = "", b(0)
}({
    0: function (a, b, c) {
        a.exports = c(112)
    },

    112: function (a, b, c) {
        function d(a) {
            e = Txplayer.$, this.msg = new Txplayer.Events, this.dataset = {}, this.context = a, this.init()
        }

        var e = Txplayer.$, f = Txplayer.util, g = c(113);
        d.prototype = {
            init: function () {
                this.write(), this.addEventListener()
            }, write: function () {
                this.dataset.pauseClass = "";
                var a = {playLayer: "txp-ui-play-layer", btn: "txp-ui-play-btn"};
                this.dataset.renderData = a;
                var b = e.tmpl(g, a);
                this.context.dataset.$playermod.append(b), this.dataset.$playLayer = this.context.dataset.$playermod.find('[data-role="' + a.playLayer + '"]'), this.dataset.$btn = this.context.dataset.$playermod.find('[data-role="' + a.btn + '"]'), this.initDisPlay()
            }, initDisPlay: function () {
                var a = this.context.dataset.playState;
                a !== -1 && a !== !1 && null !== a || this.dataset.$playLayer.addClass(Txplayer.dataset.showClass)
            }, hide: function () {
                this.dataset.$btn.addClass(this.dataset.pauseClass), this.dataset.$playLayer.removeClass(Txplayer.dataset.showClass)
            }, show: function () {
                this.dataset.$btn.removeClass(this.dataset.pauseClass), this.dataset.$playLayer.addClass(Txplayer.dataset.showClass)
            }, remove: function () {
                this.dataset.$playLayer.remove(), this.dataset.$btn.remove()
            }, addEventListener: function () {
                var a = this;
                this.dataset.$btn.on("click", function () {
                    var b = e(this);
                    b.hasClass(a.dataset.pauseClass) ? (a.context.msg.broadcast("pause"), a.context.msg.broadcast("userPausePlayer")) : a.context.msg.broadcast("playControl")
                }), this.dataset.eventsList = {}, this.dataset.privateApis = {}, this.dataset.eventsList[f.getUniqueMsgKey("videoPlaying")] = function () {
                    a.hide()
                }, this.dataset.eventsList[f.getUniqueMsgKey("pauseAd")] = function () {
                    a.show()
                }, this.dataset.eventsList[f.getUniqueMsgKey("ipadLimitInit")] = function () {
                    a.hide()
                }, e.each(this.dataset.eventsList, function (b, c) {
                    a.context.msg.on(b, c)
                }), e.each(this.dataset.privateApis, function (b, c) {
                    a.context.msg.on(b, c)
                })
            }
        }, Txplayer.register("UiPlay", d)
    },

    113: function (a, b) {
        a.exports = '<txpdiv data-role="<%=playLayer%>" class="txp_overlay_play txp_show">\n  <button data-role="<%=btn%>" class="txp_btn txp_btn_play_lg">\n    <svg class="txp_icon txp_icon_play" version="1.1" viewBox="0 0 36 36">\n      <use class="txp_svg_play" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#txp_svg_play"></use>\n    </svg>\n  </button>\n</txpdiv>'
    }
});
/*! Txplayer - v3.0.0 - 2016-12-30 16:40:14
 * Copyright (c) 2016
 * Powered by Tencent-Video Web Front End Team
 */
!function (a) {
    function b(d) {
        if (c[d])return c[d].exports;
        var e = c[d] = {exports: {}, id: d, loaded: !1};
        return a[d].call(e.exports, e, e.exports, b), e.loaded = !0, e.exports
    }

    var c = {};
    return b.m = a, b.c = c, b.p = "", b(0)
}({
    0: function (a, b, c) {
        a.exports = c(104)
    },

    104: function (a, b, c) {
        function d(a) {
            e = Txplayer.$, this.msg = new Txplayer.Events, this.dataset = {}, this.context = a, this.init()
        }

        var e = Txplayer.$, f = Txplayer.util, g = c(105);
        d.prototype = {
            init: function () {
                f.browser.qqlive || (this.dataset.appData = {}, this.dataset.promotionId = "843", this.write(), this.initDisplay(), this.addEventListerner(), this.exportsModuleApis())
            }, initDisplay: function () {
                this.context.msg.broadcast("ipadLimitInit")
            }, write: function () {
                var a = {
                    layer: "txp-ui-ipad-limit",
                    play: "txp-ui-ipad-limit-play",
                    play_text: "txp-ui-ipad-limit-play-text",
                    app1: "txp-ui-ipad-limit-app1",
                    app2: "txp-ui-ipad-limit-app2",
                    app1_text: "txp-ui-ipad-limit-app1-text",
                    app2_text: "txp-ui-ipad-limit-app2-text",
                    close: "txp-ui-ipad-limit-close",
                    tips: "txp-ui-ipad-limit-tips",
                    banner: "txp-ui-ipad-limit-banner"
                };
                this.dataset.renderData = a;
                var b = e.tmpl(g, a);
                this.context.dataset.$playermod.append(b), this.dataset.$layer = this.context.dataset.$playermod.find('[data-role="' + a.layer + '"]'), this.dataset.$play = this.context.dataset.$playermod.find('[data-role="' + a.play + '"]'), this.dataset.$play_text = this.context.dataset.$playermod.find('[data-role="' + a.play_text + '"]'), this.dataset.$app1 = this.context.dataset.$playermod.find('[data-role="' + a.app1 + '"]'), this.dataset.$app2 = this.context.dataset.$playermod.find('[data-role="' + a.app2 + '"]'), this.dataset.$app1_text = this.context.dataset.$playermod.find('[data-role="' + a.app1_text + '"]'), this.dataset.$app2_text = this.context.dataset.$playermod.find('[data-role="' + a.app2_text + '"]'), this.dataset.$close = this.context.dataset.$playermod.find('[data-role="' + a.close + '"]'), this.dataset.$tips = this.context.dataset.$playermod.find('[data-role="' + a.tips + '"]'), this.dataset.$banner = this.context.dataset.$playermod.find('[data-role="' + a.banner + '"]'), this.checkApp()
            }, stepReport: function (a, b, c) {
                var d = {
                    vid: this.context.dataset.vid,
                    promotionId: this.dataset.promotionId,
                    appCase: b || (1 === this.dataset.appData.hasApp ? 3 : 1),
                    reportStep: a,
                    limitCase: c || ""
                };
                this.context.msg.broadcast("reportAppBanner", d)
            }, remove: function () {
                this.dataset.$logo.remove()
            }, hideLayer: function () {
                this.dataset.$layer.addClass(Txplayer.dataset.hideClass)
            }, showLayer: function () {
                this.dataset.$layer.removeClass(Txplayer.dataset.hideClass)
            }, hideBanner: function () {
                this.dataset.$banner.addClass(Txplayer.dataset.hideClass)
            }, showBanner: function () {
                this.dataset.hasClose || (this.dataset.$banner.removeClass(Txplayer.dataset.hideClass), this.dataset.hasReportLimitBannerOnRight || (this.dataset.appData && 1 === this.dataset.appData.hasApp ? this.stepReport(6, null, 2) : this.stepReport(1, null, 2), this.dataset.hasReportLimitBannerOnRight = !0))
            }, checkApp: function () {
                var a = this;
                a.dataset.vid = this.context.dataset.vid, a.dataset.vid = a.dataset.vid || this.context.config.vid;
                var b = function () {
                    a.dataset.hasCheck = !0, f.AppHelper.isAppInstalled({
                        vid: a.dataset.vid,
                        promotionId: a.dataset.promotionId
                    }).done(function (b) {
                        a.dataset.appData = b, a.updateBanner(), b && 1 === b.hasApp ? a.stepReport(6, null, 1) : a.stepReport(1, null, 1), a.clickAppBannerReport()
                    })
                };
                this.dataset.hasCheck ? b() : this.context.userMsg.on("ready", function () {
                        b()
                    })
            }, clickAppBannerReport: function () {
                var a = this;
                this.dataset.appData && 1 === this.dataset.appData.hasApp ? (this.dataset.$app1.off("click.stepReport").on("click.stepReport", function () {
                        var b = a.context.dataset.playState, c = 0 === b ? 3 : 1;
                        a.stepReport(7, 3, c)
                    }), this.dataset.$app2.off("click.stepReport").on("click.stepReport", function () {
                        a.stepReport(7, 3, 2)
                    })) : (this.dataset.$app1.off("click.stepReport").on("click.stepReport", function () {
                        var b = a.context.dataset.playState, c = 0 === b ? 3 : 1;
                        a.stepReport(2, 1, c)
                    }), this.dataset.$app2.off("click.stepReport").on("click.stepReport", function () {
                        a.stepReport(2, 1, 2)
                    }))
            }, updateBanner: function () {
                this.dataset.appData && (1 === this.dataset.appData.hasApp ? (this.dataset.$app1.attr("href", this.dataset.appData.openUrl), this.dataset.$app2.attr("href", this.dataset.appData.openUrl), this.dataset.$app2_text.html(this.dataset.$app2_text.text().replace(/安装|下载/g, "打开")), this.dataset.$tips.html(this.dataset.$tips.text().replace(/安装|下载/g, "打开")), this.dataset.$app1_text.html(this.dataset.$app1_text.text().replace(/安装|下载/g, "打开"))) : this.dataset.appData.hasApp === -1 ? (this.dataset.$app1.attr("data-openurl", this.dataset.appData.openUrl), this.dataset.$app2.attr("data-openurl", this.dataset.appData.openUrl), this.dataset.$app1.attr("data-downloadurl", this.dataset.appData.downloadUrl), this.dataset.$app2.attr("data-downloadurl", this.dataset.appData.downloadUrl), this.luanchAppOnBrowser()) : (this.dataset.$app1.attr("href", this.dataset.appData.downloadUrl), this.dataset.$app2.attr("href", this.dataset.appData.downloadUrl)))
            }, luanchAppOnBrowser: function () {
                f.AppHelper.tryOpenApp(this.dataset.$app1), f.AppHelper.tryOpenApp(this.dataset.$app2)
            }, formatLimitPlayTime: function (a) {
                if (!a)return a;
                a = parseInt(a);
                var b;
                return b = a < 60 ? a + "秒" : Math.ceil(a / 60) + "分钟"
            }, addEventListerner: function () {
                var a = this;
                this.dataset.eventsList = {}, this.dataset.privateApis = {}, this.dataset.eventsList[f.getUniqueMsgKey("videoPlaying")] = function (b) {
                    a.hideLayer(), a.dataset.vid = a.context.dataset.vid, b && "film" === b.playListType ? a.showBanner() : a.hideBanner()
                }, this.dataset.eventsList[f.getUniqueMsgKey("videoEnd")] = function (b) {
                    b && "film" === b.playListType && (a.showLayer(), a.dataset.$play.attr("data-cmd", "replay"), a.dataset.$play_text.html("重新播放"), a.hideBanner())
                }, this.dataset.eventsList[f.getUniqueMsgKey("vidChange")] = function (b) {
                    a.dataset.hasClose = !1, a.dataset.hasReportLimitBannerOnRight = !1, a.checkApp()
                }, this.dataset.eventsList[f.getUniqueMsgKey("getVideoUrlSuccess")] = function () {
                    var b = a.context.dataset.getinfoJSON;
                    b && 1 === b.exem ? a.dataset.$play_text.html("试看" + a.formatLimitPlayTime(b.preview)) : a.dataset.$play_text.html("播放")
                }, this.dataset.eventsList[f.getUniqueMsgKey("error")] = function (b) {
                    a.hideBanner(), a.hideLayer()
                }, e.each(this.dataset.eventsList, function (b, c) {
                    a.context.msg.on(b, c)
                }), e.each(this.dataset.privateApis, function (b, c) {
                    a.context.msg.on(b, c)
                }), this.dataset.$play.off("click").on("click", function () {
                    "replay" === a.dataset.$play.attr("data-cmd") ? (a.context.msg.broadcast("beforeVideoRePlay"), a.context.msg.broadcast("playControl", {
                            autoplay: !0,
                            connectionPlayType: 1,
                            vid: a.dataset.vid
                        })) : a.context.msg.broadcast("playControl", {autoplay: !0})
                }), this.dataset.$close.off("click").on("click", function () {
                    a.dataset.hasClose = !0, a.dataset.$banner.addClass(Txplayer.dataset.hideClass)
                })
            }, exportsModuleApis: function () {
            }
        }, Txplayer.register("UiIpadLimit", d)
    },

    105: function (a, b) {
        a.exports = '<div data-role="<%=layer%>" class="tvp_open_btns">\n  <div class="tvp_open_inner">\n    <a data-role="<%=app1%>" class="tvp_open_btn_a" href="javascript:void(0);">\n      <span data-role="<%=app1_text%>" class="tvp_open_txt">提升3倍流畅度，安装腾讯视频</span>\n    </a>\n    <a data-role="<%=play%>" class="tvp_open_btn_b" href="javascript:void(0);">\n      <i class="icon_play_sm">\n        <svg class="svg_icon svg_icon_play_sm" viewBox="0 0 16 16"><path d="M10.83 8.309l-.001.023-4.079 2.539-.005.003-.048.03-.013-.005c-.072.051-.149.1-.245.1-.217 0-.376-.165-.412-.369l-.028-.011V5.461l.009-.005c0-.009-.009-.014-.009-.022 0-.24.197-.435.44-.435.096 0 .174.049.246.101l.032-.017 4.129 2.569v.016a.42.42 0 0 1 .153.318.414.414 0 0 1-.169.323zm3.493 2.605a.986.986 0 0 1-.948.742 1 1 0 0 1-1-1 .98.98 0 0 1 .094-.412l-.019-.01c.34-.675.549-1.427.549-2.235a5 5 0 1 0-5 5c.767 0 1.484-.186 2.133-.494l.014.03a.968.968 0 0 1 .416-.098 1 1 0 0 1 1 1 .986.986 0 0 1-.77.954 6.897 6.897 0 0 1-2.793.608 7 7 0 1 1 7-7c0 1.048-.26 2.025-.676 2.915z"></path></svg>\n      </i>\n      <span data-role="<%=play_text%>" class="tvp_open_txt">播放</span>\n    </a>\n  </div>\n</div>\n\n\n<div data-role="<%=banner%>" class="tvp_install_pop <%=Txplayer.dataset.hideClass%>">\n  <div class="tvp_install_inner">\n    <span data-role="<%=tips%>" class="tvp_install_info">下载腾讯视频客户端观看完整视频</span>\n    <a data-role="<%=app2%>" class="tvp_install_btn" href="javascript:void(0);"><span data-role="<%=app2_text%>" class="tvp_install_btn_txt">立即安装</span></a>\n    <a data-role="<%=close%>" class="tvp_install_close" href="javascript:void(0);">\n      <i class="icon_play_close">\n        <svg class="svg_icon svg_icon_play_sm" viewBox="0 0 16 16"><path d="M9 3c-3.313 0-6 2.686-6 6s2.687 6 6 6c1.093 0 2.114-.297 2.996-.808l-.004-.008c.153-.086.262-.244.262-.433 0-.277-.225-.502-.502-.502-.09 0-.17.03-.243.072l-.003-.007c-.737.43-1.592.68-2.506.68-2.759 0-4.995-2.236-4.995-4.995s2.236-4.994 4.995-4.994c2.758 0 4.994 2.236 4.994 4.994 0 .895-.238 1.733-.65 2.459l.007.004c-.047.076-.081.161-.081.258 0 .277.223.502.496.502.181 0 .331-.103.418-.248l.017.01c.505-.879.799-1.896.799-2.984 0-3.314-2.687-6-6-6zm2.357 3.644c-.187-.186-.488-.186-.674 0l-1.683 1.683-1.683-1.683c-.186-.186-.487-.186-.673 0-.186.186-.186.487 0 .673l1.683 1.683-1.684 1.684c-.186.186-.186.487 0 .674.186.186.487.186.673 0l1.684-1.684 1.684 1.684c.186.186.487.186.674 0 .186-.187.186-.488 0-.674l-1.684-1.684 1.684-1.683c.185-.186.185-.487-.001-.673z"></path></svg>\n      </i>\n    </a>\n  </div>\n</div>'
    }
});
/*! Txplayer - v3.0.0 - 2016-12-30 16:40:14
 * Copyright (c) 2016
 * Powered by Tencent-Video Web Front End Team
 */
!function (a) {
    function b(d) {
        if (c[d])return c[d].exports;
        var e = c[d] = {exports: {}, id: d, loaded: !1};
        return a[d].call(e.exports, e, e.exports, b), e.loaded = !0, e.exports
    }

    var c = {};
    return b.m = a, b.c = c, b.p = "", b(0)
}({
    0: function (a, b, c) {
        a.exports = c(71)
    },

    35: function (a, b) {
        var c = {unstarted: -1, ended: 0, playing: 1, paused: 2, buffering: 3, cued: 4, stop: 5}, d = {
            msd: "流畅180P",
            sd: "标清270P",
            hd: "高清480P",
            shd: "超清720P",
            fhd: "蓝光1080P"
        };
        a.exports = {playerstate: c, definitionMap: d}
    },

    71: function (a, b, c) {
        function d(a) {
            e = Txplayer.$, this.msg = new Txplayer.Events, this.dataset = {}, this.context = a, this.init()
        }

        var e = Txplayer.$, f = Txplayer.util;
        c(35).definitionMap;
        d.prototype = {
            init: function () {
                this.dataset.dataKey = Txplayer.dataset.localStorageKey.playTime, this.resetDataset(), this.addEventListener(), this.exportsModuleApis()
            }, resetDataset: function () {
                if (this.dataset.isGetinfoDone) {
                    var a = ["isGetinfoDone", "dataKey", "prevDefinition", "setDefinitionStartTime", "hasReportLoadingadLoadTime", "filmFirstPlayingTime"];
                    for (var b in this.dataset)e.inArray(b, a) > -1 || delete this.dataset[b]
                }
            }, resetDatasetOnVidChange: function () {
                var a = ["isGetinfoDone", "setDefinitionStartTime", "hasReportLoadingadLoadTime", "filmFirstPlayingTime", "timeupdateCounter"], b = this;
                e.each(a, function (a, c) {
                    delete b.dataset[c]
                })
            }, getDefaultReportData: function () {
                if (!Txplayer.dataset.vplayPageRecoReport)try {
                    Txplayer.dataset.vplayPageRecoReport = sessionStorage.getItem("report_recomm_player"), sessionStorage.removeItem("report_recomm_player")
                } catch (a) {
                }
                var b = {
                    uin: Txplayer.util.getQQFromCookie(),
                    vid: this.context.dataset.vid || "",
                    pid: this.context.dataset.playerId || "",
                    guid: this.context.dataset.guid || "",
                    vt: this.getCDNChannelId(),
                    type: this.getBusinessType(),
                    url: document.URL,
                    bi: this.getCurrentVideoDuration(),
                    bt: this.context.dataset.duration || "",
                    version: Txplayer.dataset.ver || "",
                    platform: f.getPlatform(),
                    format: this.context.dataset.currentDefinitionFormat || "",
                    defn: this.context.dataset.definition || "",
                    ctime: f.dateFormat(),
                    ptag: f.getPTAG(),
                    isvip: -1,
                    tpid: this.context.dataset.tpid || "",
                    pversion: this.context.config.playerType
                };
                return b.v_idx = this.context.dataset.videoPlayedIndex || 0, b.rcd_info = Txplayer.dataset.vplayPageRecoReport || "", b.rcd_info = encodeURIComponent(b.rcd_info), this.context && this.context.config && "function" === e.type(this.context.config.getUserType) && (b.isvip = 2 == this.context.config.getUserType() ? 1 : 0), b
            }, reportStep3: function (a) {
                var b = {
                    step: 3,
                    val: 0 === this.context.dataset.connectionPlayType ? 1 : 2,
                    idx: this.context.dataset.connectionPlayType
                }, c = {width: this.context.dataset.playerWidth, height: this.context.dataset.playerHeight};
                c && c.width && c.height && (b.diagonal = parseInt(Math.sqrt(Math.pow(c.width, 2) + Math.pow(c.height, 2)))), b.isfocustab = this.context.dataset.isWindowFocus, b.isvisible = this.context.msg.getData("isPlayerInScreen"), b.isfocustab = b.isfocustab ? 1 : 0, b.isvisible = b.isvisible ? 1 : 0, this.doBossReport(b)
            }, reportStep4: function () {
                var a = {
                    step: 4,
                    val: this.context.msg.getData("calcTotalPlaylist", "film"),
                    val1: 1,
                    bi: this.context.dataset.hasOwnProperty("isPlayingAd") ? 2 : 1,
                    idx: this.context.dataset.connectionPlayType
                }, b = {width: this.context.dataset.playerWidth, height: this.context.dataset.playerHeight};
                b && b.width && b.height && (a.diagonal = parseInt(Math.sqrt(Math.pow(b.width, 2) + Math.pow(b.height, 2)))), a.isfocustab = this.context.dataset.isWindowFocus, a.isvisible = this.context.msg.getData("isPlayerInScreen"), a.isfocustab = a.isfocustab ? 1 : 0, a.isvisible = a.isvisible ? 1 : 0, this.doBossReport(a)
            }, reportStep5: function (a) {
                a = a || {};
                var b;
                a.isEnd ? b = {
                        step: 5,
                        val: a.realtime,
                        val1: a.isEnd ? 1 : 2,
                        bi: a.totaltime
                    } : (b = a, b.val1 = a.isEnd ? 1 : 2, b.val = a.realtime, b.bi = a.totaltime, b.step = 5, delete b.isEnd, delete b.realtime, delete b.totaltime), b.idx = this.context.dataset.connectionPlayType;
                var c = {width: this.context.dataset.playerWidth, height: this.context.dataset.playerHeight};
                c && c.width && c.height && (b.diagonal = parseInt(Math.sqrt(Math.pow(c.width, 2) + Math.pow(c.height, 2)))), b.isfocustab = this.context.dataset.isWindowFocus, b.isvisible = this.context.msg.getData("isPlayerInScreen"), b.isfocustab = b.isfocustab ? 1 : 0, b.isvisible = b.isvisible ? 1 : 0, this.doBossReport(b)
            }, reportStep6: function (a) {
                var b = {
                    step: 6,
                    val: a.firstLoadTime,
                    val1: a.loadingAdStatus,
                    idx: this.context.dataset.connectionPlayType,
                    bi: "",
                    bt: ""
                }, c = {width: this.context.dataset.playerWidth, height: this.context.dataset.playerHeight};
                c && c.width && c.height && (b.diagonal = parseInt(Math.sqrt(Math.pow(c.width, 2) + Math.pow(c.height, 2)))), b.isfocustab = this.context.dataset.isWindowFocus, b.isvisible = this.context.msg.getData("isPlayerInScreen"), b.isfocustab = b.isfocustab ? 1 : 0, b.isvisible = b.isvisible ? 1 : 0, "number" === e.type(this.dataset.firstLoadingadEndTime) && "number" === e.type(this.dataset.loadingadProgressedTime) && (b.bi = this.dataset.firstLoadingadEndTime - this.dataset.loadingadProgressedTime), this.doBossReport(b)
            }, reportStep7: function (a) {
                var b = {step: 7, val: 0, val1: 0, idx: this.context.dataset.connectionPlayType};
                this.doBossReport(b)
            }, reportStep70: function (a) {
                var b = {step: 70, val: a};
                this.doBossReport(b)
            }, reportStep32_52: function (a) {
                var b = {
                    step: a.step,
                    val: a.waitingTimes,
                    val1: a.speed,
                    val2: 1,
                    bi: this.context.dataset.videoDuration
                };
                this.doBossReport(b)
            }, reportStep30: function (a) {
                var b = {
                    step: 30,
                    val: a.loadTime,
                    val1: a.hasOwnProperty("val1") ? a.val1 : 0,
                    val2: 2,
                    bi: this.context.dataset.videoDuration
                };
                this.context.dataset.useHls ? b.val2 = 3 : "html5hd" === this.context.config.playerType ? b.val2 = 1 : "ipadh5" !== this.context.config.playerType && "h5" !== this.context.config.playerType || (b.val2 = 2), this.doBossReport(b)
            }, reportStep50: function (a) {
                var b = {
                    step: 50,
                    val: a.loadTime,
                    val1: a.hasOwnProperty("val1") ? a.val1 : 0,
                    val2: 1,
                    bi: this.context.dataset.videoDuration
                };
                this.context.dataset.useHls ? b.val2 = 3 : "html5hd" === this.context.config.playerType ? b.val2 = 1 : "ipadhtml5" !== this.context.config.playerType && "h5" !== this.context.config.playerType || (b.val2 = 2), this.doBossReport(b)
            }, reportStep60: function (a) {
                var b = {
                    step: 60,
                    val: a.seekCostTime,
                    val1: a.hasOwnProperty("val1") ? a.val1 : 0,
                    val2: 1,
                    bi: this.context.dataset.videoDuration
                };
                this.context.dataset.useHls ? b.val2 = 3 : "html5hd" === this.context.config.playerType ? b.val2 = 1 : "ipadh5" !== this.context.config.playerType && "h5" !== this.context.config.playerType || (b.val2 = 2), this.doBossReport(b)
            }, reportStep31_51: function (a) {
                if (a.hasOwnProperty("waitingTime")) {
                    var b = a.waitingTime > 1e4;
                    a.waitingTime = b ? 1e4 : a.waitingTime;
                    var c = {
                        step: a.step,
                        val: a.waitingTime,
                        val1: b,
                        val2: 1,
                        bi: this.context.dataset.videoDuration || this.context.dataset.duration,
                        bt: this.context.dataset.duration
                    };
                    this.context.dataset.useHls ? c.val2 = 3 : "html5hd" === this.context.config.playerType ? c.val2 = 1 : "ipadh5" !== this.context.config.playerType && "h5" !== this.context.config.playerType || (c.val2 = 2), this.doBossReport(c)
                }
            }, reportStep35: function (a) {
                a = a || {};
                var b;
                "number" !== e.type(this.dataset.filmFirstPlayingTime) || "number" !== e.type(this.dataset.loadingadEndTime) && "number" !== e.type(this.dataset.filmFirstPlayTime) || (b = this.dataset.filmFirstPlayingTime - (this.dataset.loadingadEndTime || this.dataset.filmFirstPlayTime));
                var c = {
                    step: 35,
                    val: a.swtichTime || b,
                    val1: "",
                    val2: this.context.dataset.adDuration || 0,
                    bi: this.context.dataset.videoDuration
                };
                "number" === e.type(this.context.dataset.preloadStartTime) && "number" === e.type(this.dataset.loadingadEndTime) && (c.val1 = this.dataset.loadingadEndTime - this.context.dataset.preloadStartTime), this.doBossReport(c)
            }, reportStep55: function (a) {
                var b = {
                    step: 55,
                    val: a.swtichTime,
                    val1: "",
                    val2: a.prevFilmDuration,
                    bi: this.context.dataset.videoDuration
                };
                this.doBossReport(b)
            }, reportStep100: function (a) {
                var b = {
                    step: 100,
                    val: a.costTime,
                    val1: a.val1,
                    val2: 1,
                    bi: this.context.dataset.videoDuration,
                    predefn: a.predefn
                };
                this.context.dataset.useHls ? b.val2 = 3 : "html5hd" === this.context.config.playerType ? b.val2 = 1 : "ipadh5" !== this.context.config.playerType && "h5" !== this.context.config.playerType || (b.val2 = 2), this.doBossReport(b)
            }, reportStep1011: function (a) {
                var b = {step: "1011", val1: 0, val2: 0, vt: 0};
                b.val = this.dataset.getinfoEndTime - this.dataset.getinfoStartTime, "ok" === a.status ? b.val1 = 1 : a && a.data && a.data.httpError ? (b.val1 = 2, b.val2 = a.data.httpError) : (b.val1 = 3, b.val2 = a.data.code), this.doBossReport(b)
            }, reportStep1003: function (a) {
                var b = {step: "1003", val1: 0, val2: 0, vt: 0};
                b.val = this.dataset.getkeyEndTime - this.dataset.getkeyStartTime, "ok" === a.status ? b.val1 = 1 : a && a.data && a.data.httpError ? (b.val1 = 2, b.val2 = a.data.httpError) : (b.val1 = 3, 601 == a.data.code && (b.val1 = 4), b.val2 = a.data.code), this.doBossReport(b)
            }, getCDNChannelId: function () {
                var a = this.context.dataset.filmVideoData, b = this.context.msg.getData("getPlayListIndex", "film");
                return a && a[b] ? a[b].vt : ""
            }, getCurrentVideoDuration: function () {
                var a = this.context.dataset.filmVideoData, b = this.context.msg.getData("getPlayListIndex", "film");
                return a && a[b] ? a[b].duration : ""
            }, getBusinessType: function () {
                var a = this.context.dataset.getinfoJSON;
                return a && a.vl && a.vl.vi && a.vl.vi[0] && "object" === e.type(a.vl.vi[0]) && a.vl.vi[0].hasOwnProperty("type") ? a.vl.vi[0].type : ""
            }, doBossReport: function (a) {
                var b, c, d = {};
                d = e.extend(this.getDefaultReportData(), a), d && d.bi && (d.bi = parseInt(d.bi)), d && d.bt && (d.bt = parseInt(d.bt)), "html5hd" !== this.context.config.playerType && f.mobile ? "ipadh5" === this.context.config.playerType || f.os.ipad ? (b = "4299", c = "694498052") : "h5" === this.context.config.playerType || f.os.android || f.os.ios ? (b = "2865", c = "1698957057") : (b = "2865", c = "1698957057") : (b = "4298", c = "686148428");
                var g = "//btrace.video.qq.com/kvcollect?BossId={bossid}&Pwd={pwd}".replace("{bossid}", b).replace("{pwd}", c);
                g += "&" + e.param(d), f.report(g)
            }, playTimeHeartBeatStart: function () {
                var a = this;
                this.dataset.realPlayTime_TIMER || (this.dataset.realPlayTime_TIMER = setInterval(function () {
                    a.dataset.realPlayTime || (a.dataset.realPlayTime = 0), a.dataset.realPlayTime += 5, a.saveData()
                }, 5e3)), this.dataset.totalPlayTime_TIMER || (this.dataset.totalPlayTime_TIMER = setInterval(function () {
                    a.dataset.totalPlayTime || (a.dataset.totalPlayTime = 0), a.dataset.totalPlayTime += 5, a.context.dataset.userTotalPlayedTime = a.dataset.totalPlayTime
                }, 5e3))
            }, playTimeHeartBeatStop: function (a) {
                clearInterval(this.dataset.totalPlayTime_TIMER), delete this.dataset.totalPlayTime_TIMER, a && (clearInterval(this.dataset.realPlayTime_TIMER), delete this.dataset.realPlayTime_TIMER)
            }, saveData: function () {
                var a, b = f.getData(this.dataset.dataKey), c = this.context.dataset.vid;
                if (b)try {
                    a = JSON.parse(b)
                } catch (d) {
                    a = {}
                } else a = {};
                return c ? (a[c] = {
                        lastupdate: +new Date,
                        realtime: this.dataset.realPlayTime,
                        totaltime: this.dataset.totalPlayTime
                    }, a[c] = e.extend(this.getDefaultReportData(), a[c]), void f.setData(this.dataset.dataKey, JSON.stringify(a))) : void f.showError("saveData Error", "找不到vid")
            }, getData: function () {
                var a, b = f.getData(this.dataset.dataKey), c = this.context.dataset.vid;
                if (b)try {
                    a = JSON.parse(b)
                } catch (d) {
                    a = {}
                } else a = {};
                return c ? a[c] : void f.showError("getData Error", "找不到vid")
            }, clearData: function (a) {
                var b, c = f.getData(this.dataset.dataKey);
                if (a = a || this.context.dataset.vid, c)try {
                    b = JSON.parse(c)
                } catch (d) {
                    b = {}
                } else b = {};
                return a ? (b[a] && delete b[a], void f.setData(this.dataset.dataKey, JSON.stringify(b))) : void f.showError("clearData Error", "找不到vid")
            }, reportPlayTimeWhenPageInit: function () {
                var a, b = f.getData(this.dataset.dataKey), c = this, d = function (a, b) {
                    if (a) {
                        var d = parseInt(+new Date / 1e3), e = parseInt(parseInt(a.lastupdate) / 1e3);
                        d - e <= 180 || (a.isEnd = !1, c.reportStep5(a), c.clearData(b))
                    }
                };
                try {
                    a = JSON.parse(b)
                } catch (e) {
                    a = {}
                }
                for (var g in a)d(a[g], g)
            }, reportPlayTimeOnEnded: function () {
                var a, b = f.getData(this.dataset.dataKey), c = this, d = this.context.dataset.vid, e = function (a, b) {
                    a && a[b] && (a = a[b]), a && (a.isEnd = !0, c.reportStep5(a), c.clearData(b))
                };
                try {
                    a = JSON.parse(b)
                } catch (g) {
                    a = {}
                }
                e(a, d)
            }, getVideoAreaLevel: function () {
                var a = this.context.dataset.getinfoJSON;
                return a && a.vl && a.vl.vi && a.vl.vi.length && a.vl.vi[0] ? a.vl.vi[0].level : ""
            }, reportLoginUserPlayTime: function (a) {
                if (a = a || !1, "v.qq.com" === location.hostname || "film.qq.com" === location.hostname) {
                    var b;
                    if (this.context.config && "function" === e.type(this.context.config.getUserType))try {
                        b = this.context.config.getUserType()
                    } catch (c) {
                    }
                    "number" !== e.type(b) || b <= 0 || this.context.msg.broadcast("reportLoginUserPlayTime", {isend: a})
                }
            }, getReport6Status: function () {
                return this.context.dataset.isLoadingAdEmpty || !this.context.dataset.hasOwnProperty("isPlayingAd") ? 1 : this.dataset.isFilmBuffered ? 2 : 3
            }, addEventListener: function () {
                var a = this;
                this.context.msg.on("beforeVideoPlay", function (b, c) {
                    b = b || {}, a.reportStep3(b.isNewPlay)
                }), this.context.msg.on("vidChange", function (b, c) {
                    a.resetDataset()
                }), this.context.msg.on("getVideoUrlSuccess", function (b, c) {
                    a.resetDataset(), setTimeout(function () {
                        a.reportStep4(), a.dataset.isGetinfoDone = !0, a.context.dataset.reportVideoLevel = a.getVideoAreaLevel(), a.context.dataset.reportCDNChannelId = a.getCDNChannelId(), a.context.dataset.reportBusinessType = a.getBusinessType()
                    }, 0)
                }), this.context.msg.on("vidChange", function () {
                    a.resetDatasetOnVidChange()
                }), this.context.msg.on("videoPause", function () {
                    a.context.dataset.isPlayingAd || a.playTimeHeartBeatStop()
                }), this.context.msg.on("videoPlay", function (b) {
                    b && "loadingad" === b.playListType && (a.dataset.loadingadPlayTime || (a.dataset.loadingadPlayTime = +new Date)), "film" !== b.playListType || 0 !== b.index || a.dataset.filmFirstPlayTime || (a.dataset.filmFirstPlayTime = +new Date), "film" === b.playListType && b.index > 0 && (a.dataset.filmPlayTime || (a.dataset.filmPlayTime = {}), a.dataset.filmPlayTime[b.index] || (a.dataset.filmPlayTime[b.index] = +new Date))
                }), this.context.msg.on("videoPlaying", function (b) {
                    b && "film" === b.playListType && (a.dataset.filmFirstPlayingTime || (a.dataset.filmFirstPlayingTime = +new Date, a.reportStep6({
                        firstLoadTime: a.dataset.filmFirstPlayingTime - a.dataset.filmFirstPlayTime,
                        loadingAdStatus: a.getReport6Status()
                    }), a.reportStep35())), b && "film" === b.playListType && a.playTimeHeartBeatStart(), b && "loadingad" === b.playListType && (a.dataset.loadingadPlayingTime || (a.dataset.loadingadPlayingTime = +new Date, a.reportStep7())), b && "film" === b.playListType && 0 === b.index && !a.dataset.filmPlayingTime && a.dataset.filmFirstPlayTime && (a.dataset.filmPlayingTime = +new Date, a.reportStep30({loadTime: a.dataset.filmPlayingTime - (a.dataset.preloadStartTime || a.dataset.filmFirstPlayTime)})), b && "film" === b.playListType && b.index > 0 && a.dataset.filmPlayTime && (a.dataset.filmPlayingTime || (a.dataset.filmPlayingTime = {}), a.dataset.filmPlayingTime[b.index] || (a.dataset.filmPlayingTime[b.index] = +new Date, a.reportStep50({loadTime: a.dataset.filmPlayingTime[b.index] - a.dataset.filmPlayTime[b.index]})))
                }), this.context.msg.on("videoProgressDone", function (b) {
                    !a.dataset.hasOwnProperty("loadingadProgressedTime") && b && "loadingad" === b.playListType && (a.dataset.loadingadProgressedTime = +new Date)
                }), this.context.msg.on("videoWaiting", function (b) {
                    if (!a.context.dataset.isPlayingAd && !("film" !== b.playListType || b && b.videoTag && 0 === b.videoTag.buffered.length)) {
                        var c = a.context.dataset.isVideoSeeking;
                        if (!c && !b.seeking && (a.dataset.waitingTimes || (a.dataset.waitingTimes = 0), 1 !== a.dataset.waitingTimes)) {
                            a.dataset.waitingTimes++;
                            var d, e = "videoTimeUpdate.waiting_report", f = +new Date;
                            a.context.msg.off(e), a.context.msg.once(e, function () {
                                var c;
                                d = +new Date, c = 0 === b.index ? 31 : 51, a.reportStep31_51({
                                    step: c,
                                    waitingTime: d - f
                                })
                            })
                        }
                    }
                }), this.context.msg.on("networkBadStart", function (b) {
                    if ("film" === b.playListType && !b.isOnWaiting) {
                        var c = a.context.dataset.isVideoSeeking;
                        if (!c) {
                            a.dataset.waitingTimes ? a.dataset.waitingTimes++ : a.dataset.waitingTimes = 1;
                            var d, e = "networkBadEnd.waiting_report", f = +new Date;
                            a.context.msg.off(e), a.context.msg.once(e, function () {
                                var c;
                                d = +new Date, c = 0 === b.index ? 31 : 51, a.reportStep31_51({
                                    step: c,
                                    waitingTime: d - f
                                })
                            })
                        }
                    }
                }), this.context.msg.on("videoEnd", function (b) {
                    if ("film" === b.playListType && (a.dataset.waitingTimes = 0), b.playListTypeEnd && "loadingad" === b.playListType && (a.dataset.loadingadEndTime = +new Date), "film" === b.playListType && !b.playListTypeEnd) {
                        var c, d = +new Date, e = b.videoTag.duration || a.context.dataset.videoDuration;
                        a.context.msg.once("videoPlaying.switch_film_section_report", function () {
                            c = +new Date, a.reportStep55({swtichTime: c - d, prevFilmDuration: e})
                        })
                    }
                    "film" === b.playListType && b.playListTypeEnd && (a.playTimeHeartBeatStop(!0), a.reportPlayTimeOnEnded(), a.reportLoginUserPlayTime(!0)), a.dataset.hasOwnProperty("firstLoadingadEndTime") || "loadingad" !== b.playListType || (a.dataset.firstLoadingadEndTime = +new Date)
                }), this.context.msg.on("videoTimeUpdate", function (b) {
                    b && "film" === b.playListType && (a.dataset.timeupdateCounter ? a.dataset.timeupdateCounter += 1 : a.dataset.timeupdateCounter = 1, a.dataset.timeupdateCounter % 300 === 0 && a.reportLoginUserPlayTime(!1)), b && "loadingad" === b.playListType && (a.dataset.isFilmBuffered || (a.dataset.isFilmBuffered = a.context.msg.getData("isPreloadVideoBuffered")))
                }), this.context.msg.on("getinfoStart", function () {
                    a.dataset.getinfoStartTime = +new Date
                }), this.context.msg.on("getinfoFinish", function (b) {
                    b = b || {}, a.dataset.getinfoEndTime = +new Date, a.reportStep1011(b)
                }), this.context.msg.on("getkeyStart", function () {
                    a.dataset.getkeyStartTime = +new Date
                }), this.context.msg.on("getkeyFinish", function (b) {
                    b = b || {}, a.dataset.getkeyEndTime = +new Date, a.reportStep1003(b)
                }), this.context.msg.on("ready", function () {
                    a.reportPlayTimeWhenPageInit()
                }), this.context.msg.on("seekStart", function () {
                    a.dataset.filmSeekStartTime = +new Date
                }), this.context.msg.on("seekEnd", function () {
                    a.dataset.filmSeekEndTime = +new Date, a.reportStep60({seekCostTime: a.dataset.filmSeekEndTime - a.dataset.filmSeekStartTime})
                }), this.context.msg.on("seekFail", function () {
                    a.dataset.filmSeekFailTime = +new Date, a.reportStep60({
                        val1: 1,
                        seekCostTime: a.dataset.filmSeekFailTime - a.dataset.filmSeekStartTime
                    })
                }), this.context.msg.on("setDefinitionStart", function () {
                    a.dataset.setDefinitionStartTime = +new Date, a.dataset.prevDefinition = a.context.dataset.duration
                }), this.context.msg.on("setDefinitionDone", function () {
                    a.dataset.setDefinitionDoneTime = +new Date, a.reportStep100({
                        costTime: a.dataset.setDefinitionDoneTime - a.dataset.setDefinitionStartTime,
                        val1: 2,
                        predefn: a.dataset.prevDefinition
                    })
                }), this.context.msg.on("setDefinitionFail", function (b) {
                    a.dataset.setDefinitionFailTime = +new Date, a.reportStep100({
                        costTime: a.dataset.setDefinitionFailTime - a.dataset.setDefinitionStartTime,
                        val1: 3,
                        predefn: a.dataset.prevDefinition
                    })
                }), this.context.msg.on("videoPlay", function (b) {
                    if (b = b || {}, !b || "film" === b.playListType) {
                        var c = +new Date;
                        a.dataset.hasOwnProperty("_1_bufferFailTime") || 0 !== b.index || (a.context.msg.off("error._1_bufferFailTime"), a.context.msg.once("error._1_bufferFailTime", function (b) {
                            a.context.msg.off("videoPlaying._1_bufferFailTime"), a.dataset._1_bufferFailTime = +new Date, a.reportStep30({
                                loadTime: a.dataset._1_bufferFailTime - c,
                                val1: 1
                            })
                        }), a.context.msg.once("videoPlaying._1_bufferFailTime", function () {
                            a.context.msg.off("error._1_bufferFailTime")
                        })), !a.dataset.hasOwnProperty("_2_bufferFailTime") && b.index > 0 && (a.context.msg.once("error._2_bufferFailTime", function (b) {
                            a.context.msg.off("videoPlaying._2_bufferFailTime"), a.dataset._2_bufferFailTime = +new Date, a.reportStep50({
                                loadTime: a.dataset._2_bufferFailTime - c,
                                val1: 1
                            })
                        }), a.context.msg.once("videoPlaying._2_bufferFailTime", function () {
                            a.context.msg.off("error._2_bufferFailTime")
                        }))
                    }
                })
            }, exportsModuleApis: function () {
            }
        }, Txplayer.register("HdPlayerReport", d)
    }
});
/*! Txplayer - v3.0.0 - 2016-12-30 16:40:14
 * Copyright (c) 2016
 * Powered by Tencent-Video Web Front End Team
 */
!function (a) {
    function b(d) {
        if (c[d])return c[d].exports;
        var e = c[d] = {exports: {}, id: d, loaded: !1};
        return a[d].call(e.exports, e, e.exports, b), e.loaded = !0, e.exports
    }

    var c = {};
    return b.m = a, b.c = c, b.p = "", b(0)
}({
    0: function (a, b, c) {
        a.exports = c(70)
    },

    70: function (a, b) {
        function c(a) {
            d = Txplayer.$, this.dataset = {}, this.context = a, this.init()
        }

        var d = Txplayer.$, e = (Txplayer.apiList, Txplayer.util);
        c.prototype = {
            init: function () {
                this.dataset.maxHistoryPlayTimeList = 50, this.dataset.useConnectionPlay = this.context.config.useConnectionPlay, this.context.dataset.historyDefinition = this.getHistoryDefinition(), this.context.dataset.adMuteHistory = this.getAdMuteHistory(), this.context.dataset.historyPlayTime = this.getHistoryPlayTime(), this.addEventListener()
            }, savePlaytimeData: function (a) {
                var b, c = e.getData(Txplayer.dataset.localStorageKey.historyPlayTime), d = this.context.dataset.vid, f = 0;
                if (c)try {
                    b = JSON.parse(c)
                } catch (g) {
                    b = {}
                } else b = {};
                if (!d)return void e.showError("savePlaytimeData Error", "找不到vid");
                for (var h in b)f++;
                f >= this.dataset.maxHistoryPlayTimeList && (b = {}), b[d] = a, this.context.dataset.historyPlayTime = JSON.stringify(b), e.setData(Txplayer.dataset.localStorageKey.historyPlayTime, JSON.stringify(b))
            }, getHistoryPlayTime: function () {
                var a, b = e.getData(Txplayer.dataset.localStorageKey.historyPlayTime), c = this.context.dataset.vid;
                if (c || (c = this.context.config.vid), b)try {
                    a = JSON.parse(b)
                } catch (d) {
                    a = {}
                } else a = {};
                return c ? a[c] : void e.showError("getHistoryPlayTime Error", "找不到vid")
            }, clearPlaytimeData: function () {
                var a, b = e.getData(Txplayer.dataset.localStorageKey.historyPlayTime), c = this.context.dataset.vid;
                if (b)try {
                    a = JSON.parse(b)
                } catch (d) {
                    a = {}
                } else a = {};
                return c ? (delete a[c], this.context.dataset.historyPlayTime = JSON.stringify(a), void e.setData(Txplayer.dataset.localStorageKey.historyPlayTime, JSON.stringify(a))) : void e.showError("clearPlaytimeData Error", "找不到vid")
            }, saveDefinitionData: function (a) {
                a && (this.context.dataset.historyDefinition = a, e.setData(Txplayer.dataset.localStorageKey.historyDefinition, a))
            }, getHistoryDefinition: function () {
                return e.getData(Txplayer.dataset.localStorageKey.historyDefinition)
            }, saveAdMuteData: function (a) {
                this.context.dataset.adMuteHistory = JSON.stringify(a), e.setData(Txplayer.dataset.localStorageKey.adMuteHistory, a)
            }, getAdMuteHistory: function () {
                return this.context.dataset.adMuteHistory = e.getData(Txplayer.dataset.localStorageKey.adMuteHistory), e.getData(Txplayer.dataset.localStorageKey.adMuteHistory)
            }, addEventListener: function () {
                var a = this;
                this.dataset.eventsList = {}, this.dataset.eventsList[e.getUniqueMsgKey("videoPlay")] = function (b) {
                    if (b && "film" !== b.playListType) {
                        var c = "true" === a.context.dataset.adMuteHistory;
                        a.context.msg.broadcast("adMuteStateUpdate", {mute: c})
                    }
                }, this.dataset.eventsList[e.getUniqueMsgKey("adMuteChange")] = function (b) {
                    b && b.hasOwnProperty("mute") && a.saveAdMuteData(b.mute)
                }, this.dataset.eventsList[e.getUniqueMsgKey("videoTimeUpdate")] = function (b) {
                    if ("film" === b.playListType && b && b.videoTag && b.videoTag.currentTime && parseInt(b.videoTag.currentTime) % 3 === 0) {
                        var c = a.context.dataset.currentTime;
                        a.savePlaytimeData(parseInt(c))
                    }
                }, this.dataset.eventsList[e.getUniqueMsgKey("videoEnd")] = function (b) {
                    "film" === b.playListType && b.isAllEnd && a.clearPlaytimeData()
                }, this.dataset.eventsList[e.getUniqueMsgKey("definitionChange")] = function (b) {
                    a.saveDefinitionData(b)
                }, d.each(this.dataset.eventsList, function (b, c) {
                    a.context.msg.on(b, c)
                })
            }
        }, Txplayer.register("HdPlayerHistory", c)
    }
});
/*! Txplayer - v3.0.0 - 2016-12-30 16:40:14
 * Copyright (c) 2016
 * Powered by Tencent-Video Web Front End Team
 */
!function (a) {
    function b(d) {
        if (c[d])return c[d].exports;
        var e = c[d] = {exports: {}, id: d, loaded: !1};
        return a[d].call(e.exports, e, e.exports, b), e.loaded = !0, e.exports
    }

    var c = {};
    return b.m = a, b.c = c, b.p = "", b(0)
}({
    0: function (a, b, c) {
        a.exports = c(118)
    },

    118: function (a, b, c) {
        function d(a) {
            e = Txplayer.$, this.dataset = {}, this.context = a, this.init()
        }

        var e = Txplayer.$, f = Txplayer.util, g = c(119);
        d.prototype = {
            init: function () {
                this.dataset.showPoster = !0, this.context.config.poster === !1 ? this.dataset.showPoster = !1 : "string" === e.type(this.context.config.poster) && (this.context.dataset.poster = this.context.config.poster), this.write(), this.initDisplay(), this.addEventListerner(), this.exportsModuleApis()
            }, initDisplay: function () {
                function a() {
                    c.context.dataset.poster || (f.mobile ? c.context.dataset.poster = "h5tiny" === c.context.config.playerType ? f.getMobileVideoPosterByVid(b, 0) : f.getMobileVideoPosterByVid(b) : c.context.dataset.poster = f.getPcVideoPosterByVid(b)), c.dataset.$poster.css({"background-image": "url(" + c.context.dataset.poster + ")"})
                }

                if (this.dataset.showPoster) {
                    var b = this.context.dataset.vid, c = this;
                    b ? a() : this.context.msg.on("ready", function () {
                            b = c.context.dataset.vid, a()
                        })
                }
            }, write: function () {
                var a = {poster: "txp-ui-poster"};
                this.dataset.renderData = a;
                var b = e.tmpl(g, a);
                this.context.dataset.$playermod.append(b), this.dataset.$poster = this.context.dataset.$playermod.find('[data-role="' + a.poster + '"]')
            }, remove: function () {
                this.dataset.$poster.remove()
            }, setPoster: function (a) {
                "string" === e.type(a) && (this.context.dataset.poster = a, this.initDisplay())
            }, getPoster: function () {
                return this.context.dataset.poster
            }, addEventListerner: function () {
                var a = this, b = this.context.dataset.playState, c = this.context.dataset.isPlayingAd;
                (e.inArray(b, [0, 1, 3]) > -1 || c) && a.dataset.$poster.addClass(Txplayer.dataset.hideClass), this.dataset.eventsList = {}, this.dataset.eventsList[f.getUniqueMsgKey("videoPlaying")] = function () {
                    a.dataset.$poster.addClass(Txplayer.dataset.hideClass)
                }, this.dataset.eventsList[f.getUniqueMsgKey("vidChange")] = function () {
                    a.context.dataset.poster = null, a.initDisplay(), a.dataset.$poster.removeClass(Txplayer.dataset.hideClass)
                }, e.each(this.dataset.eventsList, function (b, c) {
                    a.context.msg.on(b, c)
                })
            }, exportsModuleApis: function () {
                this.dataset.moduleApis = {}, this.dataset.moduleApis.getPoster = this.getPoster.bind(this), this.dataset.moduleApis.setPoster = this.setPoster.bind(this), e.extend(this.context.userApi, this.dataset.moduleApis)
            }
        }, Txplayer.register("UiPoster", d)
    },

    119: function (a, b) {
        a.exports = '<txpdiv data-role="<%=poster%>" class="txp_poster"></txpdiv>'
    }
});
/*! Txplayer - v3.0.0 - 2016-12-30 16:40:14
 * Copyright (c) 2016
 * Powered by Tencent-Video Web Front End Team
 */
!function (a) {
    function b(d) {
        if (c[d])return c[d].exports;
        var e = c[d] = {exports: {}, id: d, loaded: !1};
        return a[d].call(e.exports, e, e.exports, b), e.loaded = !0, e.exports
    }

    var c = {};
    return b.m = a, b.c = c, b.p = "", b(0)
}({
    0: function (a, b, c) {
        a.exports = c(98)
    },

    98: function (a, b, c) {
        function d(a) {
            e = Txplayer.$, this.dataset = {}, this.context = a, this.init()
        }

        var e = Txplayer.$, f = Txplayer.util, g = (Txplayer.apiList, c(99));
        d.prototype = {
            init: function () {
                this.write(), this.addEventListerner(), this.exportsModuleApis()
            }, write: function () {
                var a = {
                    dialog: "txp-ui-dialog",
                    dialogText: "txp-ui-dialog-text",
                    dialogErrCode: "txp-ui-dialog-errcode",
                    dialogBtn: "txp-ui-dialog-button",
                    hide: Txplayer.dataset.hideClass
                }, b = e.tmpl(g, a);
                this.context.dataset.$playermod.append(b), this.dataset.$dialog = this.context.dataset.$playermod.find('[data-role="' + a.dialog + '"]'), this.dataset.$dialogText = this.context.dataset.$playermod.find('[data-role="' + a.dialogText + '"]'), this.dataset.$dialogErrCode = this.context.dataset.$playermod.find('[data-role="' + a.dialogErrCode + '"]'), this.dataset.$dialogBtn = this.context.dataset.$playermod.find('[data-role="' + a.dialogBtn + '"]')
            }, remove: function () {
                this.dataset.$dialog.remove()
            }, hide: function () {
                this.dataset.$dialog.addClass(Txplayer.dataset.hideClass)
            }, addEventListerner: function () {
                var a = this;
                this.dataset.eventsList = {}, this.dataset.eventsList[f.getUniqueMsgKey("videoPlaying")] = function () {
                    a.hide()
                }, this.dataset.eventsList[f.getUniqueMsgKey("vidChange")] = function () {
                    a.hide()
                }, e.each(this.dataset.eventsList, function (b, c) {
                    a.context.msg.on(b, c)
                }), this.dataset.$dialogBtn.on("click", function () {
                    if ("link" === a.dataset.$dialogBtn.data("type")) {
                        var b = a.context.config.otherVideoLink;
                        b && window.open(b)
                    } else"refresh" === a.dataset.$dialogBtn.data("type") && window.location.reload()
                }), this.context.msg.on("error", function (b) {
                    b && "film" !== b.type && "cgi" !== b.type || a.context.msg.broadcast("showErrorUiTips", b)
                })
            }, exportsModuleApis: function () {
                var a = this;
                this.dataset.privateApis = {}, this.dataset.privateApis.showErrorUiTips = function (b) {
                    b && "object" === e.type(b.msg) && (b.msg = b.msg.defaultMsg);
                    var c = b.code + "";
                    return c && c.indexOf("_") > -1 && (c = c.split("_")[0]), a.context.dataset.isBrowserFullscreen && a.context.msg.broadcast("exitBrowserFullscreen"), a.context.dataset.isWindowFullscreen && a.context.msg.broadcast("exitWindowFullscreen"), b && e.inArray(c, ["83"]) > -1 && "function" === e.type(a.context.config.showOpenVIPGuide) ? void a.context.config.showOpenVIPGuide() : (a.dataset.$dialog.removeClass(Txplayer.dataset.hideClass), a.dataset.$dialogText.html(b.msg || "加载失败，请重试"), a.dataset.$dialogErrCode.html("[错误码:" + b.code + "," + a.context.dataset.playerId + " ]"), a.context.msg.broadcast("disableShowControl", !0), void(e.inArray(b.code + "", ["1", "2", "3", "4", "5", "50", "52", "64", "68", "444", "445_0"]) > -1 ? a.dataset.$dialogBtn.attr("data-type", "refresh").text("点击刷新") : a.dataset.$dialogBtn.attr("data-type", "link").text("点击观看其他精彩节目")))
                }, e.each(this.dataset.privateApis, function (b, c) {
                    a.context.msg.on(b, c)
                })
            }
        }, Txplayer.register("UiDialog", d)
    },

    99: function (a, b) {
        a.exports = '<txpdiv data-role="<%=dialog%>" class="txp_overlay_dialog <%=hide%>">\n  <txpdiv class="txp_dialog">\n    <txpdiv class="txp_dialog_body">\n      <txpdiv data-role="<%=dialogText%>" class="txp_text"></txpdiv>\n      <txpdiv data-role="<%=dialogErrCode%>" class="txp_error_code">[错误码：001]</txpdiv>\n    </txpdiv>\n    <txpdiv class="txp_dialog_footer">\n      <button data-type="link" data-role="<%=dialogBtn%>" class="txp_btn txp_btn_primary">点击观看其他精彩节目</button>\n    </txpdiv>\n  </txpdiv>\n</txpdiv>'
    }
});
/*! Txplayer - v3.0.0 - 2016-12-30 16:40:14
 * Copyright (c) 2016
 * Powered by Tencent-Video Web Front End Team
 */
!function (a) {
    function b(d) {
        if (c[d])return c[d].exports;
        var e = c[d] = {exports: {}, id: d, loaded: !1};
        return a[d].call(e.exports, e, e.exports, b), e.loaded = !0, e.exports
    }

    var c = {};
    return b.m = a, b.c = c, b.p = "", b(0)
}({
    0: function (a, b, c) {
        a.exports = c(30)
    },

    30: function (a, b, c) {
        function d(a) {
            this.dataset = {}, this.context = a, this.init()
        }

        var e = c(31), f = Txplayer.$, g = Txplayer.util;
        d.prototype = {
            init: function () {
                f = Txplayer.$, this.updatePlayListIndex(0), this.playStateInit(), this.write(), this.loadSubPlugins()
            }, playStateInit: function () {
                this.context.dataset.playState = -1
            }, write: function () {
                this.dataset.hasVideoHtmlWrited = !0, this.context.dataset.$playermod.append(this.buildHTML()), this.dataset.$videomod = this.context.dataset.$playermod.find('[data-role="' + this.dataset.renderData.videomod + '"]'), this.dataset.$video = this.dataset.$videomod.find("video"), this.dataset.videoTag = this.dataset.$video[0], this.addEventListener(), this.exportsModuleApis(), this.context.userMsg.broadcast("write")
            }, remove: function () {
                this.dataset.$videomod.remove()
            }, loadSubPlugins: function () {
                var a = [];
                this.context.pluginConfig && "array" === f.type(this.context.pluginConfig.subPlugins) && (a = this.context.pluginConfig.subPlugins.slice(0));
                var b = {
                    config: this.context.config,
                    msg: this.context.msg,
                    userMsg: this.context.userMsg,
                    $mod: {$videomod: this.dataset.$videomod},
                    dataset: this.context.dataset
                };
                g.loadPlugins.call(this, a, b)
            }, buildHTML: function () {
                var a = this, b = {
                    videomod: "txp-video-wrapper",
                    data: {attrs: a.getAttrs().join(" "), videoStyle: a.getVideoStyles()}
                };
                this.dataset.renderData = b;
                var c = f.tmpl(e, b);
                return c
            }, getAttrs: function () {
                var a = {
                    isUsePlayinline: ['playsinline="isiPhoneShowPlaysinline"'],
                    isUseWebkitPlayinline: ['webkit-playsinline="isiPhoneShowPlaysinline"'],
                    isUseAirplay: "x-webkit-airplay",
                    isUseControl: 'controls="controls"',
                    isUsePreload: ['preload="auto"', 'preload="none"'],
                    isUseCrossOrigin: 'crossOrigin="anonymous"'
                }, b = [];
                for (var c in a)Txplayer.$.isArray(a[c]) ? this.context.config[c] === !0 ? b.push(a[c][0]) : b.push(a[c][1]) : this.context.config[c] === !0 && b.push(a[c]);
                return b
            }, getVideoStyles: function () {
                var a = [];
                return a.push("background-color:#000"), a.push("width:100%"), a.push("height:100%"), a.join(";")
            }, setPlayState: function (a) {
                "number" === f.type(a) && a !== this.context.dataset.playState && (this.context.dataset.playState = a, this.context.userMsg.broadcast("playStateChange", a))
            }, getPlayState: function () {
                return this.context.dataset.playState
            }, setFocusVideoCurrentTime: function (a, b) {
                var c = this.dataset.videoTag;
                if ("number" === f.type(a) && !(a < 0)) {
                    if (a > c.duration)return c.currentTime = c.duration, void g.showError("setFocusVideoCurrentTime Error", "time=" + a + ",duration=" + c.duration);
                    c.currentTime = a, b && c.play()
                }
            }, handlerAllTheLoadingadError: function () {
                if (this.context.dataset.playList && this.context.dataset.playList.length) {
                    var a = 0;
                    f.each(this.context.dataset.playList, function (b, c) {
                        c && "loadingad" === c.type && c.error && a++
                    }), a === this.context.dataset.playList.length && (this.clearPlaylist("loadingad"), this.clearFocusVideoUrl(), this.context.dataset.currentPlayListType = null, this.context.msg.broadcast("allTheLoadingAdIsError"))
                }
            }, handlerEndingadError: function () {
                this.context.msg.broadcast("videoEnd", {
                    videoTag: this.dataset.videoTag,
                    index: this.context.dataset.playListIndex,
                    playListType: "endingad",
                    isAllEnd: !0,
                    playListTypeEnd: !0
                })
            }, playTheNext: function (a) {
                if (a = a || {}, this.isTheLastOfPlayList())return void("loadingad" === a.from ? this.handlerAllTheLoadingadError() : "endingad" === a.from && this.handlerEndingadError());
                this.updatePlayListIndex(this.context.dataset.playListIndex + 1);
                var b = this.context.dataset.playList[this.context.dataset.playListIndex];
                b && b.url && (this.dataset.videoTag.src = b.url, this.dataset.videoTag.load(), this.dataset.videoTag.play())
            }, isPlaying: function () {
                return !this.dataset.videoTag.paused
            }, pause: function () {
                this.dataset.videoTag.pause()
            }, isTheLastOfPlayList: function (a) {
                if (!this.context.dataset.playList || 0 === this.context.dataset.playList.length)return !0;
                var b = this.context.dataset.playList.length, c = this.context.dataset.playListIndex;
                if (a) {
                    var d = this.calcTotalPlaylist(a), e = this.getPlayListIndex(a);
                    return e + 1 >= d
                }
                return c + 1 >= b
            }, calcTotalPlaylist: function (a) {
                if (!a)return this.context.dataset.playList.length;
                var b = 0;
                return f(this.context.dataset.playList).each(function (c, d) {
                    d.type === a && b++
                }), b
            }, clearPlaylist: function (a) {
                a || (this.context.dataset.playList = []);
                var b = [], c = this.context.dataset.playList[this.context.dataset.playListIndex], d = this.context.dataset.playListIndex, e = !1;
                f(this.context.dataset.playList).each(function (f, g) {
                    return g === c && (e = !0), g.type === a ? void(e || d--) : (b.push(g), void(g === c && (d = b.length - 1)))
                }), this.context.dataset.playList = b, a ? (d < 0 && (d = 0), this.updatePlayListIndex(d)) : this.updatePlayListIndex(0)
            }, clearFocusVideoUrl: function () {
                var a = this.dataset.videoTag;
                a.pause(), a.src = "", f(a).removeAttr("src")
            }, getPlayListIndex: function (a) {
                var b = 0, c = this;
                return a && f(c.context.dataset.playList).each(function (d, e) {
                    return c.context.dataset.playListIndex !== d && void(e.type !== a && b++)
                }), c.context.dataset.playListIndex - b
            }, getCurrentType: function () {
                if (this.context.dataset.playList) {
                    var a = this.context.dataset.playList[this.context.dataset.playListIndex];
                    return a && a.type
                }
            }, videoRequestFullScreen: function () {
                var a = this.dataset.videoTag;
                a.webkitEnterFullscreen ? a.webkitEnterFullscreen() : a.webkitRequestFullScreen ? a.webkitRequestFullScreen() : g.showError("videoRequestFullScreen", "not support")
            }, updatePlayListIndex: function (a) {
                g.showInfo("H5Player.updatePlayListIndex", a), "number" === f.type(a) && (this.context.dataset.playListIndex = a, this.setCurrentPlayListType())
            }, setCurrentPlayListType: function () {
                if (this.context.dataset.playList) {
                    var a = this.context.dataset.playList[this.context.dataset.playListIndex];
                    a && a.type && (this.context.dataset.currentPlayListType = a.type, this.context.dataset.isTheLastOfCurrentType = this.isTheLastOfPlayList(a.type))
                }
            }, addUrls2Player: function (a, b) {
                var c = {}, d = this;
                if ("array" === f.type(a) && (c.data = a), "object" === f.type(a) && "array" === f.type(a.data) && (c = a), "array" !== f.type(c.data))return void g.showInfo("addUrls2Player 参数错误");
                if (d.context.dataset.playList && !c.clear || (d.context.dataset.playList = [], d.updatePlayListIndex(0)), c.data && c.type && c.repalcePlayList === !0)if (c.data.length === d.calcTotalPlaylist(c.type)) {
                    var e = 0;
                    f(d.context.dataset.playList).each(function (a, b) {
                        b.type === c.type && (d.context.dataset.playList[a] = c.data[e], e++)
                    })
                } else d.context.dataset.playList = [], d.context.dataset.playList = c.data; else c.data && c.type && c.hasOwnProperty("startIndex") ? d.context.dataset.playList = g.insert2Array(c.data, c.startIndex, d.context.dataset.playList) : d.context.dataset.playList = d.context.dataset.playList.concat(c.data);
                !d.context.dataset.currentPlayListType && d.context.dataset.hasOwnProperty("playListIndex") && d.updatePlayListIndex(d.context.dataset.playListIndex)
            }, play: function (a) {
                function b() {
                    var a = c.context.dataset.playList[c.context.dataset.playListIndex];
                    a && a.url && (c.dataset.videoTag.src = a.url)
                }

                var c = this;
                return this.context.dataset.playList && this.context.dataset.playList.length ? ("string" === f.type(a) ? a = {url: a} : "undefined" === f.type(a) && (a = {}), "number" === f.type(a.updateIndex) && this.updatePlayListIndex(a.updateIndex), a && "undefined" === f.type(a.autoplay) && (a.autoplay = this.context.dataset.autoplay), void(a.url ? (this.dataset.videoTag.src = a.url, a.autoplay && (this.dataset.videoTag.load(), this.dataset.videoTag.play())) : this.dataset.videoTag.src ? this.dataset.videoTag.play() : (b(), a.autoplay && (this.dataset.videoTag.load(), this.dataset.videoTag.play())))) : void g.error("can not find urls data, please addURLSData first!")
            }, getThePlayListIndex: function (a, b) {
                if (!a)return -1;
                b = "number" === f.type(b) ? b : this.calcTotalPlaylist(a);
                var c, d = 0;
                return f.each(this.context.dataset.playList, function (e, f) {
                    if (f && f.type === a && (d++, d === b))return c = e, !1
                }), c
            }, handlerSkipAd: function (a) {
                a = a || {};
                var b = this.dataset.videoTag;
                "film" !== a.type && this.updatePlayListIndex(this.getThePlayListIndex(a.type)), b.currentTime = b.duration - .1
            }, addEventListener: function () {
                var a = this, b = -1, c = 0;
                this.dataset.$video.on("canplay", function () {
                    a.context.msg.broadcast("videoCanplay", this)
                }).on("play", function () {
                    a.context.msg.broadcast("videoPlay", {
                        videoTag: this,
                        playListType: a.getCurrentType(),
                        index: a.getPlayListIndex(a.getCurrentType())
                    })
                }).on("playing", function () {
                    var b = a.getCurrentType();
                    a.context.msg.broadcast("videoPlaying", {
                        videoTag: this,
                        playListType: b,
                        index: a.getPlayListIndex(a.getCurrentType())
                    }), "film" === a.context.dataset.currentPlayListType && a.setPlayState(1)
                }).on("progress", function () {
                    this.isFocus && (a.context.msg.broadcast("videoProgress", {videoTag: this}), this.buffered && this.buffered.length && this.buffered.end(this.buffered.length - 1) === this.duration && c !== this.buffered.end(this.buffered.length - 1) && (c = this.buffered.end(this.buffered.length - 1), g.showInfo("progress.done", "O(∩_∩)O哈哈~"), a.context.msg.broadcast("videoProgressDone", {
                        videoTag: this,
                        playListIndex: a.context.dataset.playListIndex,
                        playListType: a.context.dataset.currentPlayListType
                    })))
                }).on("pause", function () {
                    g.log("-----paused-----"), a.context.msg.broadcast("videoPause", {
                        videoTag: this,
                        playListType: a.getCurrentType()
                    }), "film" === a.context.dataset.currentPlayListType && a.setPlayState(2)
                }).on("timeupdate", function () {
                    var c = parseInt(this.currentTime);
                    0 !== this.currentTime && (a.context.dataset.currentTime = this.currentTime), this.buffered && this.buffered.length && (a.context.dataset.videoBufferedTime = this.buffered.end(this.buffered.length - 1));
                    var d = a.getCurrentType();
                    c !== b && (b = c, a.context.msg.broadcast("videoTimeUpdate", {
                        videoTag: this,
                        playListType: d
                    }), "film" === d && a.context.userMsg.broadcast("timeupdate", {videoTag: this}))
                }).on("ended", function () {
                    var b = a.getCurrentType(), c = a.isTheLastOfPlayList(b), d = a.isTheLastOfPlayList(), e = a.getPlayListIndex(b);
                    d && c && "film" === a.context.dataset.currentPlayListType && a.setPlayState(0), a.context.msg.broadcast("videoEnd", {
                        videoTag: this,
                        index: e,
                        playListType: b,
                        isAllEnd: d,
                        playListTypeEnd: c
                    })
                }).on("error", function (b) {
                    var c = (this.currentSrc || this.src, {}), d = {
                        1: "视频加载失败[取回过程被用户中止]",
                        2: "视频加载失败[当下载时发生错误]",
                        3: "视频加载失败[当解码时发生错误]",
                        4: "视频加载失败[不支持音频/视频]"
                    };
                    this && this.error && (c.code = this.error.code, c.msg = d[c.code]), c.type = a.getCurrentType(), c.videoTag = this, "loadingad" === c.type || "endingad" === c.type ? (a.context.dataset.playList[a.context.dataset.playListIndex] && (a.context.dataset.playList[a.context.dataset.playListIndex].error = !0), a.playTheNext({from: c.type})) : (a.context.msg.broadcast("error", c), a.context.userMsg.broadcast("error", c))
                }).on("waiting", function () {
                    a.context.msg.broadcast("videoWaiting", {
                        videoTag: this,
                        index: a.getPlayListIndex(a.getCurrentType()),
                        playListType: a.getCurrentType()
                    }), "film" === a.context.dataset.currentPlayListType && a.setPlayState(3)
                }).on("seeking", function () {
                    a.context.msg.broadcast("videoSeeking")
                }).on("seeked", function () {
                    a.context.msg.broadcast("videoSeeked")
                }).on("webkitendfullscreen", function () {
                    a.context.msg.broadcast("webkitendfullscreen")
                }).on("x5videoenterfullscreen", function () {
                    g.log("video 监听到事件")
                }).on("x5videoexitfullscreen", function () {
                    g.log("video 监听到事件")
                }), this.context.msg.on("handlerSkipAd", function (b, c) {
                    a.handlerSkipAd(b)
                }), this.context.msg.on("addUrls2Player", this.addUrls2Player.bind(this)), this.context.msg.on("videoEnd", function (b) {
                    b && b.videoTag && (f(b.videoTag).removeAttr("src"), b.videoTag.load()), b.isAllEnd ? (a.updatePlayListIndex(0), a.clearPlaylist()) : a.playTheNext(), b && b.playListTypeEnd && b.playListType && a.clearPlaylist(b.playListType)
                }), this.context.msg.on("beforeVideoPlay", function (b, c) {
                    a.context.dataset.currentPlayListType = null, a.setPlayState(-1), a.clearPlaylist()
                }), this.context.msg.on("vidChange", function (b) {
                    f(a.dataset.videoTag).removeAttr("src"), a.dataset.videoTag.load(), a.context.dataset.currentPlayListType = null, a.clearPlaylist()
                }), this.context.msg.on("play", this.play.bind(this)), this.context.msg.on("pause", this.pause.bind(this)), this.context.msg.on("playTheNext", this.playTheNext.bind(this)), this.context.msg.on("clearFocusVideoUrl", this.clearFocusVideoUrl.bind(this)), this.context.msg.on("videoRequestFullScreen", this.videoRequestFullScreen.bind(this)), this.context.msg.on("setFocusVideoCurrentTime", this.setFocusVideoCurrentTime.bind(this))
            }, exportsModuleApis: function () {
                var a = this;
                this.dataset.moduleApis = {}, this.dataset.moduleApis.getPlayerState = this.getPlayState.bind(this), f.extend(this.context.userApi, this.dataset.moduleApis), this.dataset.dataApis = {}, this.dataset.dataApis.calcTotalPlaylist = function (b, c) {
                    c.data = a.calcTotalPlaylist(b)
                }, this.dataset.dataApis.getPlayListIndex = function (b, c) {
                    c.data = a.getPlayListIndex(b)
                }, f.each(this.dataset.dataApis, function (b, c) {
                    a.context.msg.setData(b, c)
                })
            }
        }, Txplayer.register("H5Player", d)
    },

    31: function (a, b) {
        a.exports = '<txpdiv data-role="<%=videomod%>" class="txp_video_container">\n  <video style="<%=data.videoStyle%>" <%=data.attrs%> data-role="txp_video_tag" />\n</txpdiv>'
    }
});
/*! Txplayer - v3.0.0 - 2016-12-30 16:40:14
 * Copyright (c) 2016
 * Powered by Tencent-Video Web Front End Team
 */
!function (a) {
    function b(d) {
        if (c[d])return c[d].exports;
        var e = c[d] = {exports: {}, id: d, loaded: !1};
        return a[d].call(e.exports, e, e.exports, b), e.loaded = !0, e.exports
    }

    var c = {};
    return b.m = a, b.c = c, b.p = "", b(0)
}({
    0: function (a, b, c) {
        a.exports = c(128)
    },

    128: function (a, b, c) {
        function d(a) {
            e = Txplayer.$, this.dataset = {}, this.context = a, this.init()
        }

        var e = Txplayer.$, f = Txplayer.util, g = c(129);
        d.prototype = {
            init: function () {
                this.write(), this.addEventListerner()
            }, write: function () {
                var a = {shadow: "txp-shadow-mod"};
                this.dataset.renderData = a;
                var b = e.tmpl(g, a);
                this.context.$mod.$videomod.append(b), this.context.dataset.$shadow = this.context.$mod.$videomod.find("[data-role=" + a.shadow + "]")
            }, remove: function () {
                this.context.dataset.$shadow.remove()
            }, initHDPlayerEvent: function () {
                var a = 0, b = 200, c = !1, d = this, e = function () {
                    d.handlerClick()
                }, f = function () {
                    d.handlerDblClick()
                };
                this.context.dataset.$shadow.off("click.uishadow").off("dblclick.uishadow").on("click.uishadow", function () {
                    a = setTimeout(function () {
                        c || e(), c = !1
                    }, b)
                }).on("dblclick.uishadow", function () {
                    clearTimeout(a), c = !0, f()
                }), this.context.msg.on("videoPlaying", function () {
                    d.context.dataset.$shadow.css({background: "none"})
                }), this.context.msg.on("seekStart", function () {
                    d.context.dataset.$shadow.css({background: "black"})
                }), this.context.msg.on("setDefinitionStart", function () {
                    d.context.dataset.$shadow.css({background: "black"})
                })
            }, handlerClick: function () {
                var a, b = this;
                a && clearTimeout(a), a = setTimeout(function () {
                    a = null, 1 === b.context.dataset.playState ? b.context.msg.broadcast("userPausePlayer") : b.context.msg.broadcast("userPlayPlayer"), b.context.userApi && e.isFunction(b.context.userApi.togglePlayPause) && b.context.userApi.togglePlayPause()
                }, 300)
            }, handlerDblClick: function () {
                this.context.msg.broadcast("UiShadownDblClick")
            }, addEventListerner: function () {
                f.mobile || this.initHDPlayerEvent()
            }
        }, Txplayer.register("UiShadow", d)
    },

    129: function (a, b) {
        a.exports = '<txpdiv data-role="<%=shadow%>" class="txp_shadow"></txpdiv>'
    }
});
/*! Txplayer - v3.0.0 - 2016-12-30 16:40:14
 * Copyright (c) 2016
 * Powered by Tencent-Video Web Front End Team
 */
!function (a) {
    function b(d) {
        if (c[d])return c[d].exports;
        var e = c[d] = {exports: {}, id: d, loaded: !1};
        return a[d].call(e.exports, e, e.exports, b), e.loaded = !0, e.exports
    }

    var c = {};
    return b.m = a, b.c = c, b.p = "", b(0)
}({
    0: function (a, b, c) {
        a.exports = c(32)
    },

    32: function (_context, bbbbbbbbbbb, c) {
        function d(_context) {
            _$ = Txplayer.$, this.dataset = {}, this.context = _context, this.init()
        }

        var e = c(33), _$ = Txplayer.$, g = Txplayer.util, h = c(36);
        g.AppHelper = h;
        var c37 = c(37);
        d.prototype = {
            init: function () {
                this.dataset.hasVideoPlayed = !1, this.context.dataset.vid = this.context.config.vid, this.dataset.nextVid = this.context.config.nextVid, this.context.dataset.tpid = this.context.config.tpid;
                var a = {
                    vid: this.context.config.vid,
                    charge: this.context.config.isNeedPay ? 1 : 0
                }, b = {
                    msg: this.context.msg,
                    config: a,
                    dataset: this.dataset,
                    sdtfrom: g.getStdfrom(),
                    guid: this.context.dataset.guid
                };
                "ipadh5" === this.context.config.playerType && (b.defn = "mp4"), this.auth = new c37({context: this.context}), this.context.dataset.vid = this.context.config.vid, this.dataset.isNeedPay = this.context.config.isNeedPay, this.context.dataset.autoplay = !g.os.android && this.context.config.autoplay, this.dataset.playStartTime = this.context.config.playStartTime, this.dataset.skipPrelude = this.context.config.skipPrelude, this.getinfo = new e(b), this.addEventListener(), this.exportsModuleApis(), this.play({
                    nextVid: this.dataset.nextVid,
                    vid: this.context.dataset.vid
                })
            }, play: function (a) {
                "object" !== _$.type(a) || a.hasOwnProperty("nextVid") || (a.nextVid = this.context.dataset.nextVid);
                var b = function () {
                    return !!("string" === _$.type(a) || "object" === _$.type(a) && a.vid)
                }, c = this;
                if (this.context.dataset.canPlayTime && this.context.dataset.currentTime >= this.context.dataset.canPlayTime && ("undefined" === _$.type(a) || "string" === _$.type(a) && a === this.context.dataset.vid || "object" === _$.type(a) && a.vid === this.context.dataset.vid))return void this.showUIVipGuide("trial");
                if (this.context.config && "function" === _$.type(this.context.config.getUserType))try {
                    Txplayer.dataset.isvip = 2 === this.context.config.getUserType()
                } catch (d) {
                }
                if (this.context.dataset.isPlayingAd && !b())return void this.context.msg.broadcast("play");
                if (this.dataset.hasRequestloadingAd && ("undefined" === _$.type(a) || "object" === _$.type(a) && !a.vid || "object" === _$.type(a) && a.vid === this.context.dataset.vid))return void(this.context.dataset.getinfoJSON || !this.dataset.isLoadingAdEmpty ? this.context.msg.broadcast("play") : c.loadVideoUrls({autoplay: !0}));
                if (1 !== this.context.dataset.playState && !this.context.dataset.isPlayingAd || !("string" === _$.type(a) && a === this.context.dataset.vid || "object" === _$.type(a) && a.vid === this.context.dataset.vid)) {
                    if ("undefined" === _$.type(a) || "object" === _$.type(a) && !a.vid) {
                        if (this.dataset.hasVideoPlayed)return void this.context.msg.broadcast("play");
                        if (this.context.dataset.getinfoJSON && this.context.dataset.getinfoJSON.vl && this.context.dataset.getinfoJSON.vl.vi && this.context.dataset.getinfoJSON.vl.vi.length && this.context.dataset.getinfoJSON.vl.vi[0] && this.context.dataset.getinfoJSON.vl.vi[0].vid === this.context.dataset.vid && this.context.dataset.videoPreloadList && this.context.dataset.videoPreloadList.length)return void this.context.msg.broadcast("setFocusVideoUrl", _$.extend({}, this.context.dataset.videoPreloadList[0], {autoplay: !0}));
                        this.context.dataset.autoplay = !0
                    }
                    "string" === _$.type(a) ? a = {
                            vid: a,
                            autoplay: !0
                        } : ("object" !== _$.type(a) || a.vid || a.nextVid) && "undefined" !== _$.type(a) || (a = {}), a.hasOwnProperty("vid") && this.setVid(a.vid), a.hasOwnProperty("cid") && (this.dataset.cid = a.cid), a.hasOwnProperty("columnId") && (this.dataset.columnId = a.columnId), a.hasOwnProperty("autoplay") && (this.context.dataset.autoplay = a.autoplay), a.hasOwnProperty("isNeedPay") && (this.dataset.isNeedPay = a.isNeedPay), a.hasOwnProperty("nextVid") && (this.context.dataset.nextVid = a.nextVid), a.hasOwnProperty("bullet") && (this.dataset.bullet = a.bullet), a.hasOwnProperty("bulletId") && (this.dataset.bulletId = a.bulletId), a.hasOwnProperty("playEndTime") && a.playEndTime && a.hasOwnProperty("duration") && (this.context.dataset.playEndTime = parseInt(a.duration) - parseInt(a.playEndTime), this.context.dataset.playEndTime < 0 && (this.context.dataset.playEndTime = null)), a.hasOwnProperty("defaultDefinition") && (this.context.dataset.defaultDefinition = a.defaultDefinition), a.connectionPlayTime ? this.context.dataset.connectionPlayTime = a.connectionPlayTime : this.context.dataset.connectionPlayTime = 0, a.playStartTime ? this.context.dataset.playStartTime = a.playStartTime : this.context.dataset.playStartTime = 0, a.hasOwnProperty("connectionPlayType") ? this.context.dataset.connectionPlayType = a.connectionPlayType : this.context.dataset.connectionPlayType = 0, a.hasOwnProperty("title") && (this.context.dataset.title = g.xss(a.title)), this.dataset.hasVideoPlayed = !1, this.context.dataset.hasLoadVideoUrl = !1, this.context.msg.broadcast("beforeVideoPlay"), this.context.msg.broadcast("setNextVid", {nextVid: this.context.dataset.nextVid}), this.context.dataset.hasOwnProperty("isPlayingAd") || (g.log("没有广告插件"), this.loadVideoUrls({autoplay: this.context.dataset.autoplay}))
                }
            }, pause: function () {
                this.context.msg.broadcast("pause")
            }, setVid: function (a) {
                a && a !== this.context.dataset.vid && (this.context.dataset.vid = a, this.context.msg.broadcast("vidChange", a))
            }, getVid: function () {
                return this.context.dataset.vid
            }, getCid: function () {
                return this.context.dataset.cid
            }, getColumnId: function () {
                return this.context.dataset.columnId
            }, seekTo: function (a) {
                g.showInfo("seekTo", a);
                var b = this;
                this.context.msg.broadcast("seekStart", {
                    type: "film",
                    seekTime: a
                }), this.context.msg.broadcast("setFocusVideoCurrentTime", a, !0), this.context.msg.once("videoPlaying.h5playercontrolSeek", function () {
                    b.context.msg.broadcast("seekEnd")
                })
            }, getDuration: function () {
                if (!this.context.dataset.getinfoJSON)return 0;
                var a = this.context.dataset.getinfoJSON.preview;
                return 0 === this.context.dataset.getinfoJSON.exem && 0 === a && this.context.dataset.getinfoJSON.vl && this.context.dataset.getinfoJSON.vl.vi && this.context.dataset.getinfoJSON.vl.vi[0] && this.context.dataset.getinfoJSON.vl.vi[0].td && (a = parseInt(this.context.dataset.getinfoJSON.vl.vi[0].td)), a
            }, getCurrentTime: function () {
                if (this.context.dataset.isPlayingAd)return 0;
                var a = this.context.dataset.videoCurrentTime;
                return parseInt(a)
            },
            loadVideoUrls: function (a) {
                a = a || {}, this.dataset.hasLoadVideoUrl = !0;
                var b = this, c = {};
                this.context.msg.once("getVideoUrlSuccess.loadVideoUrls", function (c) {
                    c && (b.context.msg.broadcast("addUrls2Player", [{
                        url: c,
                        type: "film"
                    }]), a.autoplay && (b.context.dataset.autoplay = !0), b.context.dataset.isPlayingAd && !b.context.dataset.isPlayingAdHasError || (b.dataset.hasVideoPlayed = !0, b.context.msg.broadcast("play", {
                        url: c,
                        autoplay: b.context.dataset.autoplay
                    })))
                }), c = _$.extend({}, {vid: a.vid, charge: a.charge, autoplay: a.autoplay, fmt: "auto"});
                var d = function () {
                    delete c.autoplay, b.requestVideoUrlsByVid(c)
                };
                this.auth({vid: this.context.dataset.vid}).done(function (a) {
                    a && a.cgi && (c.cgi = a.cgi), a && a.param && (c = _$.extend(c, a.param)), d()
                }).fail(function () {
                    d()
                })
            }, requestVideoUrlsByVid: function (_data) {
                _data = _data || {};
                var requestData = {vid: this.context.dataset.vid, charge: this.dataset.isNeedPay ? 1 : 0}, c = this;
                _$.extend(requestData, _data), this.context.msg.broadcast("getinfoStart"), this.getinfo.getMobileVideoUrlByVid(requestData).done(function (a, b, d) {

                    g.log(arguments), c.context.dataset.getinfoJSON = b, c.context.dataset.filmVideoData = d, c.context.dataset.duration = c.getDuration(), c.context.msg.broadcast("getinfoEnded", {status: "ok"}), b && b.vl && b.vl.vi && "object" === _$.type(b.vl.vi[0]) && (c.context.dataset.videoWidth = b.vl.vi[0].vw, c.context.dataset.videoHeight = b.vl.vi[0].vh, c.context.dataset.tpid = b.vl.vi[0].videotype), c.context.dataset.filesize = c.getFileSize(), c.context.dataset.fileTitle = c.getFileTitle(), c.context.msg.broadcast("getVideoUrlSuccess", a)

                }).fail(function (a) {
                    var b, d = a.code;
                    a.httpError && (d += "_" + a.httpError), a.subCode && (d += "_" + a.subCode), b = Txplayer.errcode[a.code], "object" === _$.type(b) && (b = b[a.subCode], b = b || Txplayer.errcode[a.code].def), c.context.msg.broadcast("error", {
                        code: d,
                        msg: b,
                        type: "film"
                    }), c.context.msg.broadcast("getinfoEnded", {status: "fail", data: a})
                })
            }, togglePlayPause: function () {
                1 === this.context.dataset.playState ? this.pause() : this.play()
            }, getVideoSize: function () {
                return {width: this.context.dataset.videoWidth, height: this.context.dataset.videoHeight}
            }, getVideoType: function () {
                return this.context.config.videoType
            }, getPlayerType: function () {
                return this.context.config.playerType
            }, getFileSize: function () {
                return this.context.dataset.getinfoJSON && this.context.dataset.getinfoJSON.vl && this.context.dataset.getinfoJSON.vl.vi && this.context.dataset.getinfoJSON.vl.vi.length && this.context.dataset.getinfoJSON.vl.vi[0] && this.context.dataset.getinfoJSON.vl.vi[0].fs ? parseInt(this.context.dataset.getinfoJSON.vl.vi[0].fs / 1024) : 0
            }, getFileTitle: function () {
                var a = this.context.dataset.getinfoJSON;
                return a && a.vl && a.vl.vi && a.vl.vi.length && a.vl.vi[0] && a.vl.vi[0].ti ? a.vl.vi[0].ti : 0
            }, updateCurrentTime: function (a, b) {
                "number" === _$.type(a) && (this.context.dataset.currentTime = a)
            }, getStaticVideoInfo: function () {
                if (this.getinfo && this.getinfo.getStaticVideoInfo) {
                    var a = this;
                    this.getinfo.getStaticVideoInfo({vid: this.context.dataset.vid}).done(function (b) {
                        a.context.dataset.videoStaticInfo = b, a.context.msg.broadcast("getVideoStaticInfoSuccess")
                    })
                }
            }, addEventListener: function () {
                var a = this;
                this.dataset.eventsList = {}, this.dataset.eventsList[g.getUniqueMsgKey("loadingAdDataReady")] = function (b) {
                    if (!a.dataset.hasRequestloadingAd && (a.dataset.hasRequestloadingAd = !0, b && "array" === _$.type(b) && b.length)) {
                        var c = [];
                        _$(b).each(function (a, b) {
                            var d = "array" === _$.type(b.image) ? b.image[0].cs : b.image.cs;
                            b.image.url && c.push({url: b.image.url, type: "loadingad", data: {bytesTotal: d}})
                        }), 0 !== c.length && (a.context.dataset.isLoadingAdEmpty = !1, a.context.msg.broadcast("addUrls2Player", c), a.context.msg.broadcast("play"), a.context.dataset.autoplay || a.getStaticVideoInfo())
                    }
                }, this.dataset.eventsList[g.getUniqueMsgKey("endingAdDataReady")] = function (b) {
                    if (b && "array" === _$.type(b) && b.length) {
                        var c = [];
                        _$(b).each(function (a, b) {
                            b.image.url && c.push({url: b.image.url, type: "endingad"})
                        }), 0 !== c.length && (a.context.msg.broadcast("addUrls2Player", c), a.context.msg.broadcast("play"))
                    }
                }, this.dataset.eventsList[g.getUniqueMsgKey("loadingadIsEmpty")] = function () {
                    a.context.dataset.isLoadingAdEmpty = !0, a.dataset.hasRequestloadingAd = !0;
                    var b = {
                        playStartTime: a.context.dataset.skipOpeningSongTime,
                        autoplay: a.context.dataset.autoplay || !1
                    };
                    a.loadVideoUrls(b)
                }, this.dataset.eventsList[g.getUniqueMsgKey("allTheLoadingAdIsError")] = function () {
                    a.context.dataset.isLoadingAdEmpty = !0;
                    var b = {playStartTime: a.context.dataset.skipOpeningSongTime};
                    b.autoplay = !0, a.context.dataset.isPlayingAdHasError = !0, a.loadVideoUrls(b)
                }, this.dataset.eventsList[g.getUniqueMsgKey("loadingAdRequestError")] = function () {
                    a.context.dataset.isLoadingAdEmpty = !0, a.dataset.hasRequestloadingAd = !0;
                    var b = {};
                    a.loadVideoUrls(b)
                }, this.dataset.eventsList[g.getUniqueMsgKey("videoPlay")] = function (b) {
                    b && "film" === b.playListType && (a.dataset.hasVideoPlayed = !0)
                }, this.dataset.eventsList[g.getUniqueMsgKey("videoPlaying")] = function (b) {
                    if (b && "film" === b.playListType) a.dataset.hasVideoPlayed = !0, a.dataset.hasRequestLoadingAd = !1; else {
                        if (a.context.dataset.isLoadingAdEmpty)return;
                        if (a.dataset.hasLoadVideoUrl)return;
                        if ("endingad" === b.playListType)return;
                        a.loadVideoUrls()
                    }
                }, this.context.msg.on("videoEnd", function (b) {
                    b.playListTypeEnd && "film" === b.playListType && (a.dataset.hasVideoPlayed = !1, a.dataset.hasLoadVideoUrl = !1, a.context.dataset.getinfoJSON = null), b.playListType && "film" === b.playListType || (a.updateCurrentTime(0, "videoEnd"), a.context.msg.broadcast("videoTimeUpdate"))
                }), this.context.msg.on("vidChange", function () {
                    a.dataset.hasVideoPlayed = !1, a.dataset.hasLoadVideoUrl = !1, a.context.dataset.getinfoJSON = null, a.context.dataset.isLoadingAdEmpty = null, a.dataset.hasRequestloadingAd = null
                }), this.context.msg.on("beforeVideoRePlay", function () {
                    a.updateCurrentTime(0, "beforeVideoRePlay"), a.dataset.hasRequestloadingAd = null
                }), this.context.userMsg.on("1080pVipGuideClose", function (b) {
                    b && "closeSkipAd" === b.action && a.play()
                }), _$.each(this.dataset.eventsList, function (b, c) {
                    a.context.msg.on(b, c)
                })
            }, exportsModuleApis: function () {
                var a = this;
                this.dataset.moduleApis = {}, this.dataset.moduleApis.getVid = this.getVid.bind(this), this.dataset.moduleApis.getCid = this.getCid.bind(this), this.dataset.moduleApis.getColumnId = this.getColumnId.bind(this), this.dataset.moduleApis.getDuration = this.getDuration.bind(this), this.dataset.moduleApis.getCurrentTime = this.getCurrentTime.bind(this), this.dataset.moduleApis.pause = this.pause.bind(this), this.dataset.moduleApis.play = this.play.bind(this), this.dataset.moduleApis.togglePlayPause = this.togglePlayPause.bind(this), this.dataset.moduleApis.seekTo = this.seekTo.bind(this), this.dataset.moduleApis.getVideoSize = this.getVideoSize.bind(this), this.dataset.moduleApis.getFileSize = this.getFileSize.bind(this), this.dataset.moduleApis.getPlayerType = a.getPlayerType.bind(this), this.dataset.moduleApis.getVideoType = a.getVideoType.bind(this), _$.extend(this.context.userApi, this.dataset.moduleApis), this.dataset.privateApis = {}, this.dataset.privateApis.playControl = this.play.bind(this), this.dataset.privateApis.seekTo = this.seekTo.bind(this), _$.each(this.dataset.privateApis, function (b, c) {
                    a.context.msg.on(b, c)
                })
            }
        }, Txplayer.register("H5PlayerControl", d)
    },

    33: function (a, b, c) {
        function d(a) {
            f = Txplayer.$, this.context = a, this.dataset = {}
        }

        var __c34 = c(34), f = Txplayer.$, __c35 = c(35), _definitionMap = __c35.definitionMap, txplayer_util = Txplayer.util, j = ["83", "80"];
        d.prototype = {
            getDefinitionListFromData: function (a) {
                var b = [];
                if ("o" === a.s && a.fl && a.fl.fi && "array" === f.type(a.fl.fi) && a.fl.fi.length && a.fl.fi[0])for (var c = 0, d = a.fl.fi.length; c < d; c++)a.fl.fi[c].name in _definitionMap && b.push({
                    name: a.fl.fi[c].name,
                    cname: a.fl.fi[c].cname,
                    sl: a.fl.fi[c].sl,
                    format: a.fl.fi[c].id,
                    lmt: a.fl.fi[c].lmt
                });
                return b
            }, getHlsFromData: function (a) {
                var b = [];
                return 3 === a.dltype && "o" === a.s && a.vl && a.vl.vi && a.vl.vi.length && a.vl.vi[0] && a.vl.vi[0].ul && a.vl.vi[0].ul.ui && a.vl.vi[0].ul.ui.length && f.each(a.vl.vi[0].ul.ui, function (a, c) {
                    c.url && c.hls && c.hls.pt && b.push(c.url + c.hls.pt)
                }), b
            }, checkGetInfoData: function (a) {
                return !!a && (a && 0 !== a.em && "o" !== a.s ? 85 === a.em && a.type === -3 ? -1 : -2 : 1)
            }, checkGetinfoRetCode: function (a) {
                var b, c, d = 0;
                return a && a.s ? "o" !== a.s ? (d = a.em || 50, c = a.exem) : a.vl && a.vl.vi && f.isArray(a.vl.vi) && 0 !== a.vl.cnt ? b = a.vl.vi[0] : d = 68 : d = 50, 0 !== d || 5 === b.fst && f.isPlainObject(b.ul) && f.isArray(b.ul.ui) && 0 !== b.ul.ui.length ? 0 === d && 2 !== b.st && (8 != b.st ? d = 62 : (d = 83, c = b.ch)) : d = 62, this.dataset.isQQMusicAuth && 83 === d && (c = -3), Txplayer.util.isQQBuLuoHost() && (c = 0), {
                    exVal: c,
                    iRetCode: d,
                    vi: b
                }
            }, getMobileVideoUrlByVid: function (a, b) {
                b = b || {}, a.yyactid ? this.dataset.isQQMusicAuth = !0 : this.dataset.isQQMusicAuth = !1;
                var c = {
                    charge: 0,
                    vid: "",
                    defaultfmt: this.context.defn || "auto",
                    otype: "json",
                    platform: "11001",
                    sdtfrom: this.context.sdtfrom || "",
                    guid: this.context.guid,
                    host: window != top ? document.referrer : document.location.host,
                    sphls: txplayer_util.isSupportM3u8() ? 1 : 0,
                    _rnd: txplayer_util.getTimeStampStr()
                }, requestData = f.extend(c, a), getInfoRequestUrl = "http://h5vv.video.qq.com/getinfo?callback=?";
                "https:" === location.protocol && (getInfoRequestUrl = "https://h5vv.video.qq.com/getinfo?callback=?"), requestData.cgi && (getInfoRequestUrl = requestData.cgi, delete requestData.cgi);
                var h = __c34.$xx(requestData.platform, requestData.vid, this.context.sdtfrom, 1, c._rnd);
                h && h.u1 && h.u2 && h.c && (requestData._qv_rmt = h.u1, requestData._qv_rmt2 = h.u2, txplayer_util.cookie.set("qv_als", h.c));
                var j = this, k = f.Deferred();
                this.dataset.videoFormat = requestData.fmt, this.dataset.vid = requestData.vid, this.dataset.platform = requestData.platform;
                var l = arguments.callee;
                return b.isEmRetry && b.defer && (k = b.defer), b.isRetry && b.cgi && (getInfoRequestUrl = b.cgi), b.isRetry && b.defer && (k = b.defer), j.context.msg.broadcast("getinfoStart"), f.ajax({
                    url: getInfoRequestUrl,
                    data: requestData,
                    dataType: "jsonp",
                    jsonpCallback: Txplayer.util.getJsonpCallbackName("getinfo")
                }).done(function (c) {
                    var e, g, h = j.checkGetInfoData(c);
                    if (1 === h) {
                        if (e = j.checkGetinfoRetCode(c), 83 === e.iRetCode) txplayer_util.showInfo("付费信息", "当前视频需要付费观看,vid=" + requestData.vid); else if (0 !== e.iRetCode)return Txplayer.util.error(e.iRetCode), void k.reject();
                        var m;
                        if (3 == c.dltype) {
                            if (m = j.getHlsFromData(c), "array" !== f.type(m) || !m.length || !m[0])return void k.reject({
                                code: "76",
                                type: "hls",
                                msg: "获取m3u8文件名失败"
                            });
                            g = m[0]
                        } else g = j.getMobileVideoMp4Url({
                            path: e.vi.ul.ui[0].url,
                            fn: e.vi.fn,
                            vkey: e.vi.fvkey,
                            alias: e.vi.alias,
                            br: e.vi.br,
                            level: e.vi.level,
                            sha: e.vi.fsha,
                            platform: 2,
                            fmt: j.dataset.videoFormat || "",
                            sdtfrom: Txplayer.util.getStdfrom(),
                            vid: j.dataset.vid
                        });
                        j.context.msg.broadcast("reportGetinfo", {
                            filename: e.vi.fn,
                            cdnIp: Txplayer.util.getHostNameByUrl(e.vi.ul.ui[0].url),
                            cdnId: e.vi.ul.ui[0].vt,
                            vkey: e.vi.fvkey
                        }), m = j.getPcVideoMp4Url(c), k.resolve(g, c, m)
                    } else {
                        var n;
                        b.isEmRetry ? k.reject({code: c.em, subCode: c.exem}) : (n = {
                                defer: k,
                                isEmRetry: !0
                            }, l.call(j, a, n))
                    }
                }).fail(function (c, d) {
                    if (!d || "abort" !== d) {
                        var e;
                        b && b.isRetry ? k.reject({code: 444, httpError: c.status ? c.status + "" : ""}) : (e = {
                                defer: k,
                                isRetry: !0,
                                cgi: "//bkh5vv.video.qq.com/getinfo?callback=?"
                            }, l.call(j, a, e))
                    }
                }).always(function (a, b) {
                    var c = {data: {}};
                    "error" === b || a && "error" === a.statusText ? c.data.httpError = a.status : "timeout" === b || a && "timeout" === a.statusText ? c.data.httpError = 600 : a && a.em ? c.data.code = a.em : c.status = "ok", j.context.msg.broadcast("getinfoFinish", c)
                }), k
            }, getMobileVideoMp4Url: function (a) {
                a = a || {};
                var b, c = !1;
                return a.alias && "string" == typeof a.fn && a.vid && (a.fn = a.fn.replace(a.vid, a.alias), c = !0), b = a.path.indexOf("?") > -1 ? a.path + "&" + a.fn + "&" + ["vkey=" + a.vkey, "br=" + a.br, "platform=" + this.dataset.platform, "fmt=" + a.fmt, "&level=" + a.level, "&sdtfrom=" + Txplayer.util.getStdfrom()].join("&") : a.path + a.fn + "?" + ["vkey=" + a.vkey, "br=" + a.br, "platform=" + this.dataset.platform, "fmt=" + a.fmt, "&level=" + a.level, "&sdtfrom=" + Txplayer.util.getStdfrom()].join("&"), "string" == typeof a.sha && a.sha.length > 0 && (b += "&sha=" + a.sha), c && (b += "&vidalias=1"), b && b.indexOf && b.indexOf("guid=") === -1 && (b += "&guid=" + this.context.guid), b
            }, requestMobileVideoHlsUrl: function (a) {
                var b = "http://info.zb.video.qq.com", c = f.Deferred();
                "https:" === location.protocal && (b = "https://info.zb.video.qq.com");
                var d = {
                    cnlid: a.vid,
                    host: txplayer_util.getMainHostName(),
                    cmd: 2,
                    qq: txplayer_util.getQQFromCookie(),
                    guid: encodeURIComponent(txplayer_util.createGUID()),
                    txvjsv: "2.0",
                    stream: 2
                }, e = {debug: "", ip: ""};
                return f.each(e, function (a) {
                    e[a] = txplayer_util.getUrlParam(a)
                }), f.extend(d, e), txplayer_util.os.windows && (d.system = 0), (txplayer_util.os.iphone || txplayer_util.os.ipod) && (d.system = 1, d.sdtfrom = 113), txplayer_util.os.ipad && (d.sdtfrom = 213), txplayer_util.os.android && (d.system = 2, d.sdtfrom = 313), txplayer_util.os.mac && (d.system = 3), f.ajax({
                    url: b,
                    data: d,
                    dataType: "jsonp"
                }).done(function (a) {
                    return a && a.playurl ? void c.resolve(a.playurl) : void c.reject(a)
                }), c
            }, getPcVideoMp4Url: function (a) {
                function b(a, b) {
                    if (0 === b)return a;
                    var c = a.lastIndexOf("."), d = a.substr(0, c) + "." + b + a.substring(c);
                    return d
                }

                function c(a) {
                    var b = a.indexOf("."), c = a.substr(b);
                    return c
                }

                function d(a, b, c, d) {
                    for (var e = [], f = {}, g = {}, h = a.ui.length, j = 0; j < h; j++)f = a.ui[j], g = {}, f.url && (f.url && f.url.indexOf(b + ".flv") === -1 && f.url.indexOf(b + ".mp4") === -1 ? g.url = f.url + c : g.url = f.url, f.vt && (g.vt = parseInt(f.vt)), g.url.indexOf("sdtfrom") === -1 && (g.url.indexOf("?") > -1 ? g.url += "&sdtfrom=" + Txplayer.util.getStdfrom() : g.url += "?sdtfrom=" + Txplayer.util.getStdfrom(), g.url += "&guid=" + i.context.guid), e.push(g));
                    return e
                }

                var e, f, g, h, i = this, j = a.vl, k = j.vi, l = k[0], m = [], n = l.fn;
                if (3 == a.dltype) {
                    e = {}, e.vid = l.lnk, e.width = parseInt(l.vw), e.height = parseInt(l.vh), e.bytesTotal = parseInt(l.fs), e.byteRate = l.br, e.filename = l.fn, f = l.fn, e.newFileName = f, e.fileNameSuffix = c(f);
                    var o = i.getHlsFromData(a);
                    e.urlArray = [], h = o.length;
                    for (var p = 0; p < h; p++)e.urlArray.push({url: o[p]});
                    return e.vt = l.ul.ui[0].vt, e.duration = parseInt(l.td, 10), m.push(e), m
                }
                if (h = l.cl.fc, !l.cl.ci && l.fvkey && l.fn && l.ul && l.ul.ui && l.ul.ui.length)return e = {}, e.vid = l.lnk, e.width = parseInt(l.vw), e.height = parseInt(l.vh), e.bytesTotal = parseInt(l.fs), e.byteRate = l.br, e.filename = l.fn, f = l.fn, e.newFileName = f, e.fileNameSuffix = c(f), e.urlArray = d(l.ul, l.lnk, f, e.fileNameSuffix), e.vt = l.ul.ui[0].vt, e.duration = parseInt(l.td, 10), m.push(e), m;
                if (l.cl.ci && h === l.cl.ci.length) {
                    for (var q = 0; q < h; q++)g = l.cl.ci[q], e = {}, e.vid = l.lnk, e.width = parseInt(l.vw), e.height = parseInt(l.vh), e.bytesTotal = parseInt(g.cs), e.duration = parseFloat(g.cd), e.byteRate = l.br, e.filename = l.fn, f = b(n, q + 1), e.newFileName = f, e.fileNameSuffix = c(f), e.urlArray = d(l.ul, l.lnk, f, e.fileNameSuffix), e.vt = l.ul.ui[0].vt, m.push(e);
                    return m
                }
            }, getHDVideoUrlByVid: function (a, b) {
                b = b || {};
                var c = {
                    isHLS: !1,
                    charge: !1,
                    vid: "",
                    defn: "auto",
                    defnpayver: 1,
                    otype: "json",
                    guid: this.context.guid,
                    platform: "10901",
                    newplatform: "10901",
                    ehost: document.URL,
                    appVer: Txplayer.dataset.ver,
                    sdtfrom: this.context.sdtfrom || "",
                    host: window != top ? document.referrer : document.location.host,
                    _rnd: txplayer_util.getTimeStampStr()
                }, d = f.extend(c, a), g = "http://h5vv.video.qq.com/getinfo?callback=?";
                "https:" === location.protocol && (g = "https://h5vv.video.qq.com/getinfo?callback=?");
                var h = __c34.$xx(d.platform, d.vid || d.vids, this.context.sdtfrom, 1, c._rnd);
                h && h.u1 && h.u2 && h.c && (d._qv_rmt = h.u1, d._qv_rmt2 = h.u2, txplayer_util.cookie.set("qv_als", h.c));
                var j = this, k = f.Deferred();
                this.dataset.videoFormat = d.defn, this.dataset.vid = d.vid, this.dataset.platform = d.platform;
                var l = arguments.callee;
                b.isRetry && b.cgi && (g = b.cgi), b.isRetry && b.defer && (k = b.defer), a.show1080p || (d.defnpayver = 0), this.context.msg.broadcast("getinfoStart"), txplayer_util.showInfo("getinfo", {
                    url: g,
                    data: d
                });
                var m = f.ajax({
                    url: g,
                    data: d,
                    dataType: "jsonp",
                    timeout: 6e3,
                    jsonpCallback: Txplayer.util.getJsonpCallbackName("getinfo")
                }).done(function (a) {
                    var b, c, e, g = j.checkGetInfoData(a);
                    if (1 === g) {
                        if (b = j.checkGetinfoRetCode(a), 83 === b.iRetCode) txplayer_util.showInfo("付费信息", "当前视频需要付费观看,vid=" + d.vid); else if (0 !== b.iRetCode)return Txplayer.util.error(b.iRetCode), void k.reject();
                        a.iRetCode = b.iRetCode, c = j.getPcVideoMp4Url(a), "array" === f.type(c) && c.length && b.vi.fvkey && (e = c[0].urlArray[0].url + "&vkey=" + b.vi.fvkey), j.dataset.sectionsData = c, j.dataset.firstSectionUrl = e, j.dataset.getinfoData = a, j.dataset.definitionList = j.getDefinitionListFromData(a), k.resolve(e, c, j.dataset.definitionList, a), j.context.msg.broadcast("reportGetinfo", {
                            filename: b.vi.fn,
                            cdnIp: Txplayer.util.getHostNameByUrl(b.vi.ul.ui[0].url),
                            cdnId: b.vi.ul.ui[0].vt,
                            vkey: b.vi.fvkey
                        })
                    } else k.reject({code: a.em, exem: a.exem})
                }).fail(function (c, d) {
                    if (!d || "abort" !== d) {
                        var e;
                        b && b.isRetry ? k.reject({code: 444, httpError: c.status ? c.status + "" : ""}) : (e = {
                                defer: k,
                                isRetry: !0,
                                cgi: "//bkh5vv.video.qq.com/getinfo?callback=?"
                            }, l.call(j, a, e))
                    }
                }).always(function (a, b) {
                    var c = {data: {}};
                    "error" === b || a && "error" === a.statusText ? c.data.httpError = a.status : "timeout" === b || a && "timeout" === a.statusText ? c.data.httpError = 600 : a && a.em ? c.data.code = a.em : c.status = "ok", j.context.msg.broadcast("getinfoFinish", c)
                });
                return this.context.msg.on("vidChange", function () {
                    m.abort()
                }), this.context.msg.on("seekStart", function () {
                    m.abort()
                }), k
            }, getHLSVideoUrlByVid: function (a, b) {
                b = b || {};
                var c = {
                    charge: 0,
                    vid: "",
                    defaultfmt: "auto",
                    otype: "json",
                    guid: this.context.guid,
                    platform: "10901",
                    newplatform: "10901",
                    dtype: 3,
                    defnpayver: 1,
                    sphls: 1,
                    appVer: Txplayer.dataset.ver,
                    sdtfrom: this.context.sdtfrom || "",
                    host: window != top ? document.referrer : document.location.host,
                    _rnd: txplayer_util.getTimeStampStr()
                }, d = f.extend(c, a), g = "http://h5vv.video.qq.com/getinfo?callback=?";
                "https:" === location.protocol && (g = "https://h5vv.video.qq.com/getinfo?callback=?");
                var h = __c34.$xx(d.platform, d.vids || d.vid, this.context.sdtfrom, 1, c._rnd);
                h && h.u1 && h.u2 && h.c && (d._qv_rmt = h.u1, d._qv_rmt2 = h.u2, txplayer_util.cookie.set("qv_als", h.c));
                var j = this, k = f.Deferred();
                this.dataset.videoFormat = d.defn, this.dataset.vid = d.vid, this.dataset.platform = d.platform;
                var l = arguments.callee;
                b.isRetry && b.cgi && (g = b.cgi), b.isRetry && b.defer && (k = b.defer), a.show1080p || (d.defnpayver = 0), this.context.msg.broadcast("getinfoStart"), txplayer_util.showInfo("getinfo", {
                    url: g,
                    data: d
                });
                var m = f.ajax({
                    url: g,
                    data: d,
                    dataType: "jsonp",
                    timeout: 6e3,
                    jsonpCallback: Txplayer.util.getJsonpCallbackName("getinfo")
                }).done(function (a) {
                    var b, c, e, g = j.checkGetInfoData(a);
                    if (1 === g) {
                        if (b = j.checkGetinfoRetCode(a), 83 === b.iRetCode) txplayer_util.showInfo("付费信息", "当前视频需要付费观看,vid=" + d.vids); else if (0 !== b.iRetCode)return Txplayer.util.error(b.iRetCode), void k.reject();
                        a.iRetCode = b.iRetCode, 1 == a.dltype ? (c = j.getPcVideoMp4Url(a), "array" === f.type(c) && c.length && (e = c[0].urlArray[0].url + "&vkey=" + b.vi.fvkey), j.dataset.sectionsData = c, j.dataset.firstSectionUrl = e, j.dataset.getinfoData = a, j.dataset.definitionList = j.getDefinitionListFromData(a), k.resolve(e, c, j.dataset.definitionList, a), j.context.msg.broadcast("reportGetinfo", {
                                filename: b.vi.fn,
                                cdnIp: Txplayer.util.getHostNameByUrl(b.vi.ul.ui[0].url),
                                cdnId: b.vi.ul.ui[0].vt,
                                vkey: b.vi.fvkey
                            })) : 3 == a.dltype && (c = j.getPcVideoMp4Url(a), "array" === f.type(c) && c.length && c[0] && c[0].urlArray && c[0].urlArray[0] && c[0].urlArray[0].url && (e = c[0].urlArray[0].url), j.dataset.sectionsData = c, j.dataset.firstSectionUrl = e, j.dataset.getinfoData = a, j.dataset.definitionList = j.getDefinitionListFromData(a), k.resolve(e, c, j.dataset.definitionList, a), j.context.msg.broadcast("reportGetinfo", {
                                filename: b.vi.fn,
                                cdnIp: Txplayer.util.getHostNameByUrl(b.vi.ul.ui[0].url),
                                cdnId: b.vi.ul.ui[0].vt
                            }))
                    } else k.reject({code: a.em, exem: a.exem})
                }).fail(function (c, d) {
                    if (!d || "abort" !== d) {
                        var e;
                        b && b.isRetry ? k.reject({code: 444, httpError: c.status + ""}) : (e = {
                                defer: k,
                                isRetry: !0,
                                cgi: "https:" === location.protocol ? "https://bkh5vv.video.qq.com/getinfo?callback=?" : "http://bkh5vv.video.qq.com/getinfo?callback=?"
                            }, l.call(j, a, e))
                    }
                }).always(function (a, b) {
                    var c = {data: {}};
                    "error" === b || a && "error" === a.statusText ? c.data.httpError = a.status : "timeout" === b || a && "timeout" === a.statusText ? c.data.httpError = 600 : a && a.em ? c.data.code = a.em : c.status = "ok", j.context.msg.broadcast("getinfoFinish", c)
                });
                return this.context.msg.on("vidChange", function () {
                    m.abort()
                }), this.context.msg.on("seekStart", function () {
                    m.abort()
                }), k
            }, getHDVideoVkey: function (a) {
                function b(a) {
                    for (var b = 0, c = a.length; b < c; b++)if (1 == a[b].sl)return a[b].id;
                    return -1
                }

                var c = f.Deferred(), d = "http://h5vv.video.qq.com/getkey?callback=?&";
                "https:" === location.protocol && (d = "https://h5vv.video.qq.com/getkey?callback=?&");
                var g = {
                    otype: "json",
                    vid: a.vid,
                    format: b(this.dataset.getinfoData.fl.fi),
                    filename: a.newFileName,
                    platform: "10901",
                    appVer: Txplayer.dataset.ver,
                    vt: a.vt,
                    sdtfrom: this.context.sdtfrom || "",
                    guid: this.context.guid,
                    charge: a.isNeedPay ? 1 : 0,
                    _rnd: txplayer_util.getTimeStampStr()
                }, h = __c34.$xx(g.platform, g.vid || g.vids, this.context.sdtfrom, 1, g._rnd);
                h && h.u1 && h.u2 && h.c && (g._qv_rmt = h.u1, g._qv_rmt2 = h.u2, txplayer_util.cookie.set("qv_als", h.c));
                var k, l = this, m = function (a) {
                    return a && a.em && f.inArray(a.em + "", j) > -1 ? void c.reject(a || {}) : n > Txplayer.defaultconfig.keyRetryTimes ? void c.reject(a && a.em ? a : {em: 445}) : (n++, l.context.msg.broadcast("getkeyStart"), void(k = f.ajax({
                                url: d,
                                data: g,
                                dataType: "jsonp",
                                jsonpCallback: Txplayer.util.getJsonpCallbackName("getkey")
                            }).done(function (a) {
                                a && a.key ? c.resolve(a.key) : m(a)
                            }).fail(function (a, b) {
                                b && "abort" === b || m({em: 445, httpError: a.status + ""})
                            }).always(function (a, b) {
                                var c = {data: {}};
                                "error" === b || a && "error" === a.statusText ? c.data.httpError = a.status : "timeout" === b || a && "timeout" === a.statusText ? c.data.httpError = 600 : a && a.em ? c.data.code = a.em : a && a.key ? c.status = "ok" : c.data.code = 601, l.context.msg.broadcast("getkeyFinish", c)
                            })))
                }, n = 0;
                return m(), this.context.msg.on("vidChange", function () {
                    k && k.abort()
                }), c
            }, getStaticVideoInfo: function (a) {
                var b = f.Deferred(), c = "http://h5vv.video.qq.com/getextinfo?callback=?&";
                "https:" === location.protocol && (c = "https://h5vv.video.qq.com/getextinfo?callback=?&");
                var d = {
                    otype: "json",
                    vid: a.vid,
                    platform: "11001",
                    h5flag: 1
                }, e = this.context.msg.getData("isInAuthRuleList");
                e && (d.haskey = 1);
                var g, h = function () {
                    return g = f.ajax({
                        url: c,
                        data: d,
                        dataType: "jsonp",
                        jsonpCallback: Txplayer.util.getJsonpCallbackName("getextinfo")
                    }).done(function (a) {
                        a ? b.resolve(a) : b.reject()
                    }).fail(function () {
                        b.reject()
                    }), b
                };
                return this.context.msg.on("vidChange", function () {
                    g && g.abort()
                }), h()
            }
        }, a.exports = d
    },

    34: function (a, b) {
        var c = {};
        c.ha = function (a) {
            function b(a, b) {
                return ((a >> 1) + (b >> 1) << 1) + (1 & a) + (1 & b)
            }

            for (var c = [], d = 0; d < 64;)c[d] = 0 | 4294967296 * Math.abs(Math.sin(++d));
            var e = function (d) {
                for (var e, f, g, h, i = [], j = window.unescape(encodeURI(d)), k = j.length, l = [e = 1732584193, f = -271733879, ~e, ~f], m = 0; m <= k;)i[m >> 2] |= (j.charCodeAt(m) || 128) << 8 * (m++ % 4);
                for (i[d = (k + 8 >> 6) * a + 14] = 8 * k, m = 0; m < d; m += a) {
                    for (k = l, h = 0; h < 64;)k = [g = k[3], b(e = k[1], (g = b(b(k[0], [e & (f = k[2]) | ~e & g, g & e | ~g & f, e ^ f ^ g, f ^ (e | ~g)][k = h >> 4]), b(c[h], i[[h, 5 * h + 1, 3 * h + 5, 7 * h][k] % a + m]))) << (k = [7, 12, 17, 22, 5, 9, 14, 20, 4, 11, a, 23, 6, 10, 15, 21][4 * k + h++ % 4]) | g >>> 32 - k), e, f];
                    for (h = 4; h;)l[--h] = b(l[h], k[h])
                }
                for (d = ""; h < 32;)d += (l[h >> 3] >> 4 * (1 ^ 7 & h++) & 15).toString(a);
                return d
            };
            return e
        }(16), c.stringToHex = function (a) {
            for (var b = "", c = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"), d = 0; d < a.length; d++)b += c[a.charCodeAt(d) >> 4] + c[15 & a.charCodeAt(d)];
            return b
        }, c.hexToString = function (a) {
            for (var b = "", c = "0x" == a.substr(0, 2) ? 2 : 0; c < a.length; c += 2)b += String.fromCharCode(parseInt(a.substr(c, 2), 16));
            return b
        }, c._Seed = "#$#@#*ad", c.tempcalc = function (a, b) {
            for (var c = "", d = 0; d < a.length; d++)c += String.fromCharCode(a.charCodeAt(d) ^ b.charCodeAt(d % 4));
            return c
        }, c.u1 = function (a, b) {
            for (var c = "", d = b; d < a.length; d += 2)c += a.charAt(d);
            return c
        }, c._urlStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", c.urlenc = function (a, b, d) {
            for (var e, f, g, h, i, j, k, l = "", m = 0; m < a.length;)e = a.charCodeAt(m++), f = a.charCodeAt(m++), g = a.charCodeAt(m++), 15 == m && (l += "A", l += b, l += d), h = e >> 2, i = (3 & e) << 4 | f >> 4, j = (15 & f) << 2 | g >> 6, k = 63 & g, isNaN(f) ? j = k = 64 : isNaN(g) && (k = 64), l = l + c._urlStr.charAt(h) + c._urlStr.charAt(i) + c._urlStr.charAt(j) + c._urlStr.charAt(k);
            return l
        }, c.$xx = function (platform, vid, sdtfrom, e, _rnd) {
            _rnd = _rnd || parseInt(+new Date / 1e3), e = ("" + e).charAt(0);
            var g = "", h = "", i = {plt: platform || "", vid: vid || "", std: sdtfrom || "", sts: e || "", ts: _rnd, rf: g, ua: h};
            i = window.JSON ? JSON.stringify(i) : function () {
                    var a = [];
                    for (var b in i)a.push('"' + b + '":"' + i[b] + '"');
                    return "{" + a.join(",") + "}"
                }(i);
            var j = c.hexToString(c.ha(platform + vid + _rnd + c._Seed + g + h + e.charAt(0) + sdtfrom)), k = c.urlenc(c.tempcalc(j, c._Seed), e.charAt(0), _rnd), l = c.urlenc(c.tempcalc(j, "86FG@hdf"), e.charAt(0), _rnd), m = c.u1(k, 0), n = c.u1(k, 1);
            return {p: i, u: k, c: l, u1: m, u2: n, t: _rnd}
        }, a.exports = c
    },

    35: function (a, b) {
        var c = {unstarted: -1, ended: 0, playing: 1, paused: 2, buffering: 3, cued: 4, stop: 5}, d = {
            msd: "流畅180P",
            sd: "标清270P",
            hd: "高清480P",
            shd: "超清720P",
            fhd: "蓝光1080P"
        };
        a.exports = {playerstate: c, definitionMap: d}
    },

    36: function (module, exports) {
        var AppHelper = {}, util = Txplayer.util, api = Txplayer.apiList, isChecking = !1, checked = !1, config = {
            mqqBrowserApiUrl: "//res.imtt.qq.com/browser_lightapp/QQBrowserApi/getCryptext/browser_interface_getCryptext.js",
            mqqApiUrl: "//pub.idqqimg.com/qqmobile/qqapi.js"
        }, appConfig = {
            qqlive: {
                md5Cgi: "http://mcgi.v.qq.com/commdatav2?cmd=39&otype=json&confid=${id}",
                md5Cgi_https: "https://sec.video.qq.com/p/mcgi.v/commdatav2?cmd=39&otype=json&confid=${id}",
                payUrl: "http://film.qq.com/weixin/detail/${index}/${cid}.html",
                scheme: "tenvideo2://",
                openUrl: "tenvideo2://?action=5&video_id=${vid}",
                liveOpenUrl: "tenvideo2://?action=8&channel_id=${lid}",
                downloadUrl: function () {
                    return util.os.iphone ? "https://itunes.apple.com/cn/app/id458318329?mt=8" : util.os.ipad ? "https://itunes.apple.com/cn/app/teng-xun-shi-pinhd/id407925512?mt=8" : util.os.android ? "http://mcgi.v.qq.com/commdatav2?cmd=4&confid=${promotionId}&platform=aphone" : void 0
                }(),
                VIA: "ANDROIDQQ.QQLIVE",
                appId: "100730521",
                packageName: util.os.ios ? "com.tencent.live4iphone" : "com.tencent.qqlive",
                packageUrl: "tenvideo2://can_open_me_if_install_and_regeister_this_scheme",
                appName: "腾讯视频"
            }
        };
        AppHelper.loadMqqBrowserAPI = function () {
            if (Txplayer.dataset.loadMqqBrowserAPIDefer)return Txplayer.dataset.loadMqqBrowserAPIDefer;
            var a = Txplayer.$.Deferred();
            if (Txplayer.dataset.loadMqqBrowserAPIDefer = a, window.x5) a.resolve(); else {
                var b = config.mqqBrowserApiUrl;
                Txplayer.$.getScript(b, function () {
                    window.x5 ? a.resolve() : a.reject()
                })
            }
            return setTimeout(function () {
                a.reject()
            }, 5e3), a
        }, AppHelper.loadMqqAPI = function () {
            if (Txplayer.dataset.loadQQClientDefer)return Txplayer.dataset.loadQQClientDefer;
            var a = Txplayer.$.Deferred();
            if (Txplayer.dataset.loadQQClientDefer = a, window.mqq || window.QQApi) a.resolve(); else {
                var b = config.mqqApiUrl;
                Txplayer.$.getScript(b, function () {
                    a.resolve()
                })
            }
            return setTimeout(function () {
                a.reject()
            }, 3e3), a
        }, AppHelper.getWechatOpenid = function () {
            var a = "";
            return util.browser.wechat && (a = util.getUrlParam("openid", window != top ? top.location.href.toString() : "")), a
        }, AppHelper.getAppMd5 = function (a, b) {
            var c = Txplayer.$.Deferred();
            a = a || 140, b = b || "qqlive";
            var d = "https:" === window.location.protocol ? appConfig[b].md5Cgi_https : appConfig[b].md5Cgi, e = d.replace("${id}", a);
            return Txplayer.$.ajax({
                url: e,
                dataType: "jsonp",
                jsonpCallback: "getmd5_callback_" + parseInt(1e6 * Math.random())
            }).then(function (a) {
                c.resolve(a && a.data ? a.data : a)
            }), c
        }, AppHelper.OnWechatReady = function () {
            var a = Txplayer.$.Deferred(), b = window === top ? document : top.document;
            return b.addEventListener("WeixinJSBridgeReady", function () {
                a.resolve()
            }), a
        }, AppHelper.isAppInstalled = function (a) {
            a = a || {};
            var b = Txplayer.$.Deferred(), c = {
                hasApp: -1, openUrl: "", downloadUrl: "",
                promotionId: a.promotionId || 140
            };
            util.os.ios || util.os.android || (c.hasApp = -2, b.resolve(c));
            var d = "";
            a.appName || (a.appName = "qqlive");
            var e = appConfig[a.appName];
            c.openUrl = e.openUrl, c.downloadUrl = e.downloadUrl, c.appTitleName = e.appName, a.vid && (c.openUrl = c.openUrl.replace(/\$\{vid\}/gi, a.vid)), c.promotionId && (c.openUrl.indexOf("from=") > -1 ? c.openUrl = c.openUrl.replace(/\&from=(\d)+/, "&from=" + a.promotionId) : c.openUrl += "&from=" + a.promotionId, c.downloadUrl = c.downloadUrl.replace(/\$\{promotionId\}/gi, a.promotionId)), util.browser.wechat && (d = AppHelper.getWechatOpenid(), d && c.openUrl.indexOf("wxplugopenid=") === -1 && (c.openUrl += "&wxplugopenid=" + d)), util.browser.wechat ? c.openUrl += "&callback=weixin%3A%2F%2F&sender=%e5%be%ae%e4%bf%a1" : util.browser.mqq && (c.openUrl += "&callback=mqqapi%3A%2F%2F&sender=%E6%89%8B%E6%9C%BAQQ"), a.openUrl && (c.openUrl = util.xss(a.openUrl));
            var f = function () {
                window === top ? document : top.document;
                Txplayer.util.fiddlerLog("taskInWechat");
                var d = function () {
                    if (Txplayer.util.fiddlerLog("taskInWechat.invoke"), !top.WeixinJSBridge || !top.WeixinJSBridge.invoke)return Txplayer.util.fiddlerLog("taskInWechat.invoke no api"), void b.resolve(c);
                    var d = {packageUrl: e.packageUrl, packageName: e.packageName};
                    Txplayer.util.fiddlerLog("taskInWechat.invoke exec api"), top.WeixinJSBridge.invoke("getInstallState", d, function (d) {
                        Txplayer.util.fiddlerLog({"taskInWechat.invoke": d});
                        var e = d.err_msg;
                        e.indexOf("get_install_state:yes") > -1 ? (c.hasApp = 1, b.resolve(c)) : (c.hasApp = 0, AppHelper.getAppMd5(c.promotionId, a.appName).done(function (a) {
                                a && a.md5 && (c.md5 = a.md5), b.resolve(c)
                            }).fail(function () {
                                c.md5 = "-1", b.resolve(c)
                            }))
                    })
                };
                top.WeixinJSBridge ? d() : AppHelper.OnWechatReady().done(function () {
                        d()
                    }), setTimeout(function () {
                    b.resolve(c)
                }, 6e3)
            }, g = function () {
                var a = util.os.ios ? e.packageUrl : e.packageName, d = function () {
                    c.appid = e.appId, c.packageName = e.packageName, c.via = e.VIA, !util.os.ios && window.QQApi && window.QQApi.checkAppInstalled ? window.QQApi.checkAppInstalled(a, function (a) {
                            c.hasApp = a && 0 != a ? 1 : 0, b.resolve(c)
                        }) : window.mqq && window.mqq.app && window.mqq.app.isAppInstalled ? window.mqq.app.isAppInstalled(a, function (a) {
                                c.hasApp = a ? 1 : 0, b.resolve(c)
                            }) : b.resolve(0)
                };
                AppHelper.loadMqqAPI().done(function () {
                    d()
                })
            }, h = function () {
                !util.os.iphone && window.QQApi && QQApi.checkAppInstalled && g();
                var a = function () {
                    window.x5 && x5.ios && x5.ios.getMobileAppSupport ? x5.ios.getMobileAppSupport({scheme: e.packageUrl}, function (a) {
                            a ? (c.hasApp = 1 == a.isSupportApp ? 1 : 0, b.resolve(c)) : b.resolve(0)
                        }, function () {
                            b.resolve(0)
                        }) : b.resolve(0), setTimeout(function () {
                        b.resolve(0)
                    }, 300)
                };
                if (!util.os.iphone && window.x5mtt && window.x5mtt.isApkInstalled) {
                    var d = window.x5mtt.isApkInstalled('{"packagename": "com.tencent.qqlive"}');
                    c.hasApp = d == -1 ? 0 : 1, b.resolve(c)
                } else util.os.iphone && parseInt(util.os.version) > 5 ? AppHelper.loadMqqBrowserAPI().done(function () {
                        a()
                    }).fail(function () {
                        b.resolve(0)
                    }) : b.resolve(0);
                setTimeout(function () {
                    b.resolve(0)
                }, 3e3)
            };
            return util.browser.wechat ? f() : util.browser.mqq ? g() : util.browser.mqqbrowser ? h() : b.resolve(c), b
        }, AppHelper.checkHasApp = function (a) {
            a = a || {};
            var b = -1, c = Txplayer.$.Deferred();
            util.os.ios || util.os.android || (b = -2, c.resolve(b)), a.appName || (a.appName = "qqlive");
            var d = appConfig[a.appName], e = function () {
                var a = function () {
                    if (!top.WeixinJSBridge || !top.WeixinJSBridge.invoke)return void c.resolve(-1);
                    var a = {packageUrl: d.packageUrl, packageName: d.packageName};
                    top.WeixinJSBridge.invoke("getInstallState", a, function (a) {
                        var d = a.err_msg;
                        b = d.indexOf("get_install_state:yes") > -1 ? 1 : 2, c.resolve(b)
                    })
                };
                top.WeixinJSBridge ? a() : AppHelper.OnWechatReady().done(function () {
                        a()
                    }), setTimeout(function () {
                    c.resolve(-1)
                }, 6e3)
            }, f = function () {
                var a = util.os.ios ? d.packageUrl : d.packageName, e = function () {
                    !util.os.ios && window.QQApi && window.QQApi.checkAppInstalled ? window.QQApi.checkAppInstalled(a, function (a) {
                            b = a && 0 != a ? 1 : 2, c.resolve(b)
                        }) : window.mqq && window.mqq.app && window.mqq.app.isAppInstalled ? window.mqq.app.isAppInstalled(a, function (a) {
                                b = a ? 1 : 2, c.resolve(b)
                            }) : c.resolve(-1)
                };
                AppHelper.loadMqqAPI().done(function () {
                    e()
                })
            }, g = function () {
                !util.os.iphone && window.QQApi && QQApi.checkAppInstalled && f();
                var a = function () {
                    window.x5 && x5.ios && x5.ios.getMobileAppSupport ? x5.ios.getMobileAppSupport({scheme: d.packageUrl}, function (a) {
                            a ? (b = 1 == a.isSupportApp ? 1 : 2, c.resolve(b)) : c.resolve(-1)
                        }, function () {
                            c.resolve(-1)
                        }) : c.resolve(-1), setTimeout(function () {
                        c.resolve(-1)
                    }, 300)
                };
                if (!util.os.iphone && window.x5mtt && window.x5mtt.isApkInstalled) {
                    var e = window.x5mtt.isApkInstalled('{"packagename": "com.tencent.qqlive"}');
                    b = e == -1 ? 2 : 1, c.resolve(b)
                } else util.os.iphone && parseInt(util.os.version) > 5 ? AppHelper.loadMqqBrowserAPI().done(function () {
                        a()
                    }).fail(function () {
                        c.resolve(-1)
                    }) : c.resolve(-1);
                setTimeout(function () {
                    c.resolve(-1)
                }, 3e3)
            };
            return util.browser.wechat ? e() : util.browser.mqq ? f() : util.browser.mqqbrowser ? g() : c.resolve(-1), c
        }, AppHelper.check = function () {
            isChecking || checked || (isChecking = !0, AppHelper.checkHasApp().done(function (a) {
                util.log("app-helper checkHasApp", a), Txplayer.msg.broadcast("onCheckHasApp", a), Txplayer.dataset.hasApp = a
            }).always(function () {
                isChecking = !1, checked = !0
            }))
        }, AppHelper.getPromotionIdByPtag = function () {
            var a = util.getPTAG() || "";
            Txplayer.$.Deferred();
            if (a) {
                var b = " http://growth.video.qq.com/fcgi-bin/h5_player_ptag", c = {appid: 1, appkey: 1, ptag: a};
                Txplayer.$.ajax({
                    url: b,
                    data: c,
                    dataType: "jsonp",
                    jsonpCallback: "getmd5_callback_" + parseInt(1e6 * Math.random())
                }).then(function (a) {
                    util.log(a)
                })
            }
        }, AppHelper.getAppInfo = function (a) {
            a = a || {};
            var b = Txplayer.$.Deferred(), c = {vid: a.vid || "", promotionId: a.promotionId || 140}, d = "";
            a.appName || (a.appName = "qqlive");
            var e = appConfig[a.appName];
            return c.openUrl = e.openUrl, c.downloadUrl = e.downloadUrl || "", c.appTitleName = e.appName, a.vid && (c.openUrl = c.openUrl.replace(/\$\{vid\}/gi, a.vid)), c.promotionId && (c.openUrl.indexOf("from=") > -1 ? c.openUrl = c.openUrl.replace(/\&from=(\d)+/, "&from=" + a.promotionId) : c.openUrl += "&from=" + a.promotionId, c.downloadUrl = c.downloadUrl.replace(/\$\{promotionId\}/gi, a.promotionId), c.downloaderUrl = c.downloadUrl), util.browser.miuibrowser && "xiaomiqj" === util.getPTAG() && (c.downloadUrl = "market://details?id=com.tencent.qqlive&startDownload=true&ref=app_free_migs&back=true"), util.browser.wechat ? (d = AppHelper.getWechatOpenid(), d && c.openUrl.indexOf("wxplugopenid=") === -1 && (c.openUrl += "&wxplugopenid=" + d), c.openUrl += "&callback=weixin%3A%2F%2F&sender=%e5%be%ae%e4%bf%a1", AppHelper.getAppMd5(c.promotionId, a.appName).done(function (a) {
                    a && a.md5 && (c.md5 = a.md5), b.resolve(c)
                }).fail(function () {
                    c.md5 = "-1", b.resolve(c)
                })) : util.browser.mqq ? (c.openUrl += "&callback=mqqapi%3A%2F%2F&sender=%E6%89%8B%E6%9C%BAQQ", c.appid = e.appId, c.packageName = e.packageName, c.via = e.VIA, b.resolve(c)) : b.resolve(c), b
        }, AppHelper.tryOpenApp = function (a) {
            if (a && a.length && !util.browser.wechat && !util.browser.mqq) {
                var b = a.attr("data-openurl"), c = a.attr("data-downloadurl");
                if (b && c) {
                    var d = function () {
                        if (Txplayer.util.fiddlerLog("openApp"), util.os.ios && util.compareVersion(util.os.version, "9.0") > -1)try {
                            Txplayer.util.fiddlerLog({openurl: b, s: "直接打开"}), window.location.href = b
                        } catch (a) {
                        } else {
                            Txplayer.util.fiddlerLog({openurl: b, s: "iframe打开"});
                            var a = document.createElement("iframe");
                            a.style.cssText = "width:1px;height:1px;position:fixed;top:0;left:0;opacity:0;", a.src = b, document.body.appendChild(a)
                        }
                    }, e = function () {
                        Txplayer.util.fiddlerLog({downloadurl: c, s: "downloadApp"}), window.location.href = c
                    }, f = function () {
                        d();
                        var a = (new Date).valueOf();
                        setTimeout(function () {
                            var b = (new Date).valueOf();
                            b - a < 1550 && e()
                        }, 1500)
                    };
                    a.off("click.try-open-app").on("click.try-open-app", f)
                }
            }
        }, AppHelper.fixOpenUrl = function (vid, openUrl) {
            if (vid && openUrl) {
                var re = eval("/(video_id=)([^&]*)/gi"), nUrl = openUrl.replace(re, "video_id=" + vid);
                return nUrl
            }
        }, module.exports = AppHelper
    },

    37: function (a, b) {
        function constantRequestUrl(a) {
            var b = {
                getinfo: ["http://h5vv.video.qq.com/getinfo?", "https://sec.video.qq.com/p/h5vv.video/getinfo?"],
                edugetvinfo: ["http://sv.video.qq.com/edugetvinfo?", "https://sec.video.qq.com/p/sv.video/edugetvinfo?"],
                mvgetinfo: ["http://sv.video.qq.com/mvgetinfo?", "https://sec.video.qq.com/p/sv.video/mvgetinfo?"],
                getinfoInews: ["http://h5wx.video.qq.com/getinfo?callback=?", "https://sec.video.qq.com/p/h5wx.video/getinfo?callback=?"],
                getvinfo: ["http://h5vv.video.qq.com/getvinfo?", "https://sec.video.qq.com/p/h5vv.video/getvinfo?"],
                getkey: ["http://h5vv.video.qq.com/getkey?", "https://sec.video.qq.com/p/h5vv.video/getkey?"],
                mvgetkey: ["http://sv.video.qq.com/mvgetkey?", "https://sec.video.qq.com/p/sv.video/mvgetkey?"],
                getkeyInews: ["http://h5wx.video.qq.com/getkey?callback=?", "https://sec.video.qq.com/p/h5wx.video/getkey?callback=?"],
                zb: ["http://info.zb.video.qq.com/?", "https://sec.video.qq.com/p/info.zb/video/?"],
                rmd_mobile: ["http://like.video.qq.com/fcgi-bin/rmd_mobile?", "https://sec.video.qq.com/p/like.video/fcgi-bin/rmd_mobile?"],
                like: ["http://like.video.qq.com/fcgi-bin/like?", "https://sec.video.qq.com/p/like.video/fcgi-bin/like?"],
                dataout_ex: ["http://sns.video.qq.com/fcgi-bin/dlib/dataout_ex?", "https://sec.video.qq.com/p/sns.video/fcgi-bin/dlib/dataout_ex?"],
                get_dtype: ["http://h5vv.video.qq.com/getdtype?", "https://sec.video.qq.com/p/h5vv.video/getdtype?"]
            };
            return "https:" === window.location.protocol ? b[a][1] : b[a][0]
        }

        function d(a) {
            return e = Txplayer.$, this.context = a.context, this.init()
        }

        var e = Txplayer.$, f = Txplayer.util, g = f.AppHelper, h = [{
            reg: function () {
                return !!this.cfg.noAuth
            },
            request: function (a) {
                var b = this;
                a.resolve({param: {vids: b.cfg.vid, defaultfmt: b.cfg.fmt}})
            }
        }, {
            reg: function () {
                return !!this.cfg.eduext
            },
            request: function (a) {
                var b = this;
                a.resolve({
                    cgi: constantRequestUrl("edugetvinfo"),
                    param: {eduext: b.cfg.eduext, platform: 261001, vid: b.cfg.vid, defn: b.cfg.fmt}
                })
            }
        }, {
            reg: function () {
                return 1 === this.cfg.classType
            },
            request: function (a) {
                var b = this;
                a.resolve({cgi: constantRequestUrl("edugetvinfo"), param: {platform: 221001, vid: b.cfg.vid, defn: b.cfg.fmt}})
            }
        }, {
            reg: function () {
                if (window !== top && "v.qq.com" === location.hostname && "/iframe/player.html" === location.pathname) {
                    var a = f.getParams(location.href);
                    if (a && a.cKey && a.encryptVer && a.platform)return this.params = a, !0
                }
                return !1
            },
            request: function (a) {
                var b, d = this, e = {
                    cgi: constantRequestUrl("getinfo"),
                    param: {
                        encryptVer: d.params.encryptVer,
                        platform: d.params.platform,
                        cKey: d.params.cKey,
                        vids: d.cfg.vid,
                        defaultfmt: d.cfg.fmt
                    }
                };
                try {
                    b = window.parent.location.href
                } catch (f) {
                }
                b && (e.param.wxrefer = b), a.resolve(e)
            }
        }, {
            reg: function () {
                return !(!f.browser.mqq || "xiaoqu.qq.com" !== window.location.hostname && "buluo.qq.com" !== window.location.hostname)
            }, request: function (a) {
                if (!window.getBrowserSignature)return void a.reject();
                var b = this;
                window.getBrowserSignature(b.cfg.vid, function (c) {
                    var d;
                    if (c && c.data)try {
                        var e = JSON.parse(c.data);
                        e && e.result && e.result.token && (d = e.result.token)
                    } catch (g) {
                    }
                    d ? a.resolve({
                            param: {
                                cKey: d,
                                encryptVer: "6.4",
                                platform: f.os.ios ? "170408" : "170308",
                                vids: b.cfg.vid,
                                defaultfmt: b.cfg.fmt
                            }
                        }) : a.reject()
                })
            }
        }, {
            reg: function () {
                return !(!f.browser.mqqbrowser || f.browser.mqq || f.browser.wechat || window !== top)
            }, request: function (a) {
                var b, d, h = this, i = "undefined" != typeof h.cfg.svr_time ? h.cfg.svr_time + "" : parseInt(+new Date / 1e3) + "", j = function () {
                    var b, d, e = {vid: h.cfg.vid};
                    e.timestamp = i, f.os.ios ? (b = window.x5.ios.getBrowserSignature, d = f.os.ipad ? e : "vid:" + e.vid + "[" + e.timestamp + "]") : (b = window.x5.android.getBrowserSignature, d = "vid:" + e.vid + "[" + e.timestamp + "]"), b(d, function (b) {
                        var d;
                        "object" == typeof b && b.key && b.ver && b.platform ? (d = {
                                cgi: constantRequestUrl("getvinfo"),
                                param: {
                                    cKey: b.key,
                                    encryptVer: b.ver,
                                    platform: b.platform,
                                    vid: h.cfg.vid,
                                    defn: h.cfg.fmt
                                }
                            }, a.resolve(d)) : "object" == typeof b && b.data ? (d = {
                                    cgi: constantRequestUrl("getvinfo"),
                                    param: {
                                        cKey: b.data,
                                        encryptVer: "4.0",
                                        platform: "161001",
                                        vid: h.cfg.vid,
                                        defn: h.cfg.fmt
                                    }
                                }, a.resolve(d)) : "string" == typeof b ? (d = {
                                        cgi: constantRequestUrl("getvinfo"),
                                        param: {
                                            cKey: b,
                                            encryptVer: "4.0",
                                            platform: "161001",
                                            vid: h.cfg.vid,
                                            defn: h.cfg.fmt
                                        }
                                    }, a.resolve(d)) : a.reject()
                    }, function () {
                        a.reject()
                    })
                };
                b = window.x5 && window.x5.ios && "function" === e.type(window.x5.ios.getBrowserSignature), d = window.x5 && "function" === e.type(window.x5.getBrowserSignature), b || d ? j() : g.loadMqqBrowserAPI().done(function () {
                        b = window.x5 && window.x5.ios && "function" === e.type(window.x5.ios.getBrowserSignature), d = window.x5 && "function" === e.type(window.x5.getBrowserSignature), b || d ? j() : a.reject()
                    }).fail(function () {
                        a.reject()
                    })
            }
        }, {
            reg: function () {
                return !(!f.browser.qqnews && !f.browser.kuaibao)
            }, request: function (a) {
                var b, c, d, e = this, g = e.cfg.vid, h = "undefined" != typeof e.cfg.svr_time ? e.cfg.svr_time + "" : parseInt(+new Date / 1e3) + "", i = "TVP_KUAIBAO_CB_" + h.substr(-4, 4);
                if (window.top !== window) {
                    try {
                        var j = window.top.location.href;
                        j && (b = window.top, c = b.document)
                    } catch (k) {
                        d = !0
                    }
                    if (d)return void a.reject()
                } else b = window, c = b.document;
                b[i] = function (b) {
                    var c;
                    try {
                        c = JSON.parse(b)
                    } catch (d) {
                    }
                    if (c && c.key && c.ver && c.platform && c.sdtfrom) {
                        var f = {
                            param: {
                                cKey: c.key,
                                encryptVer: c.ver,
                                platform: c.platform,
                                sdtfrom: c.sdtfrom,
                                vid: e.cfg.vid,
                                defaultfmt: "mp4",
                                clip: 4
                            }
                        };
                        a.resolve(f)
                    } else a.reject()
                };
                var l = function () {
                    var a = {
                        method: "getCKey",
                        types: ["string", "string", "string"],
                        args: [g, h, i],
                        instanceName: "TencentNewsScriptControllerJsInterface"
                    }, b = "jsbridge://get_with_json_data?json=" + encodeURIComponent(JSON.stringify(a)) + "&_t=" + h, c = new Image;
                    c.src = b
                }, m = function () {
                    var a = function () {
                        b.getBrowserSignature(g, h, i)
                    };
                    "function" == typeof b.getBrowserSignature ? (a(), c.addEventListener("TencentNewsJSInjectionComplete", function () {
                            a()
                        })) : c.addEventListener("TencentNewsJSInjectionComplete", function () {
                            a()
                        })
                };
                f.os.ios ? m() : f.os.android ? l() : a.reject()
            }
        }, {
            reg: function () {
                return !(!f.browser.douban && !f.browser.liebao)
            }, request: function (a) {
                var b, c = this, d = "undefined" != typeof c.cfg.svr_time ? c.cfg.svr_time + "" : parseInt(+new Date / 1e3) + "", e = function () {
                    if (!window.getBrowserSignature)return void a.reject();
                    try {
                        b = window.getBrowserSignature(c.cfg.vid, d)
                    } catch (e) {
                    }
                    if (b && b.key && b.ver && b.platform) {
                        var f = {
                            param: {
                                cKey: b.key,
                                encryptVer: b.ver,
                                platform: b.platform,
                                vid: c.cfg.vid,
                                defaultfmt: c.cfg.fmt
                            }
                        };
                        a.resolve(f)
                    } else a.reject()
                };
                e()
            }
        }, {
            reg: function () {
                return !(!f.browser.mqq || "mqqcartoon" !== f.getUrlParam("openS"))
            }, request: function (a) {
                var b = this, d = "undefined" != typeof b.cfg.svr_time ? b.cfg.svr_time + "" : parseInt(+new Date / 1e3) + "";
                e.getScript("http://imgcache.qq.com/club/client/comic/release/js/util/qqComicVideoAuth.js?t=" + d, function () {
                    "function" === e.type(window.getBrowserSignature) ? window.getBrowserSignature(b.cfg.vid, function (d) {
                            if (d && d !== -1) {
                                var e = {
                                    cgi: constantRequestUrl("getvinfo"),
                                    param: {
                                        cKey: d,
                                        encryptVer: "6.4",
                                        platform: "170101",
                                        vid: b.cfg.vid,
                                        defn: b.cfg.fmt
                                    }
                                };
                                a.resolve(e)
                            }
                        }) : a.reject()
                })
            }
        }];
        d.prototype = {
            init: function () {
                return this.exportsModuleApis(), this.reg_request
            },
            reg_request: function (a, b) {
                var c = this;
                c.cfg = a, c.cfg2 = b;
                var d = e.Deferred(), f = !1;
                return e(h).each(function (a, b) {
                    return "function" !== e.type(b.reg) || ("function" !== e.type(b.request) || (!b.reg.call(c) || (f = !0, b.request.call(c, d), !1)))
                }), f || d.reject(), setTimeout(function () {
                    d.reject()
                }, 6e3), d
            },
            exportsModuleApis: function () {
                var a = this;
                this.context.msg.setData("isInAuthRuleList", function (b, c) {
                    var d = !1;
                    a.cfg = {}, a.cfg2 = {}, e(h).each(function (b, c) {
                        return "function" !== e.type(c.reg) || (!c.reg.call(a) || (d = !0, !1))
                    }), c.data = d
                })
            }
        }, a.exports = d
    }
});